繁体   English   中英

对于包含类别名称的每个类别行,从产品表中仅获取一行

[英]get only one row from products table for each category row with category name included

我有两个表的产品和类别。 1类有很多产品。 在索引页面上,我只想显示一个属于每个类别的最新产品。 换句话说,一种产品属于一种类别。

这是我的表结构类别表

分类表

产品表 产品表

我尝试了许多答案,但无法理解他们的回答。 因此,plz建议我查询并在可能的情况下进行详细说明。

尝试使用SQL JOINS。 像这样的东西

SELECT cat.category_name,pro.sub_categories FROM Category AS cat INNER JOIN product AS pro ON cat.Id=pro.Id WHERE cat.Id=1

另外,在执行此操作之前,请确保您在products表中具有category id ,否则JOIN ON条件将不起作用。

由于mysql不支持窗口功能,我只能建议这样做,希望在product_table中没有两个具有相同日期的产品。 因为我没有可用的运行mysql,所以我不确定这是否可行。

select c.category_name
     , p.product_name
     , p.color
     , p.category_id
     , p.sub_categories
     , p.detail
     , p.[date]
     , p.[id]
     , p.bst_seller
     , p.size
  from products p
  join ( select category_id
              , max([date])
           from product_table
       ) d
    on p.[date] = d.[date]
  join category_table
    on p.category_id = c.[id]


旧版本-仅适用于sql-server

尝试使用row_number窗口函数选择每个类别的最新产品,然后加入:

 with products as ( select product_name , color , category_id , sub_categories , detail , [date] , [id] , bst_seller , size , ROW_NUMBER() over (partition by category_id order by date desc) as cand from product_table ) select c.category_name , p.product_name , p.color , p.category_id , p.sub_categories , p.detail , p.[date] , p.[id] , p.bst_seller , p.size from products p join category_table c on p.category_id = c.id where p.cand = 1 

经过一整天的努力,我自己得到了:)

SELECT category_id, product_name
FROM products
GROUP BY category_id

它产生了我想要的东西,以下

结果

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM