我试图在数据库中找到产品属于产品类别的所有订单。但该类别存储在Orderline表中。
我的表结构大致是:
订购表
ID
Date
OrderLine表
ID
Product_ID
ProductCategory_ID
Quantity
产品类别表
ID
Name
我的sql看起来像:
Select
o.Id,
o.Date,
pf.Name,
From Order o
JOIN OrderLine ol on o.Id = ol.Order_Id
JOIN ProductCategory pc on ol.ProductCategory_Id = pc.Id
WHERE
pc.ID in ('1000','1001', '1002')
但是当订单有多个属于同一类别的订单行时,我会遇到每个订单多行。由于我只想要一个摘要,我只想要每个订单一行。
答案 0 :(得分:2)
使用DISTINCT子句:
Select DISTINCT
o.Id,
o.Date,
pc.Name,
From Order o
JOIN OrderLine ol on o.Id = ol.Order_Id
JOIN ProductCategory pc on ol.ProductCategory_Id = pc.Id
WHERE
pc.ID in ('1000','1001', '1002')
这将确保只返回不同的行(不同的行)。
您的SELECT子句中似乎也有语法错误(您的意思是pc.Name
而不是pf.Name
吗?)。
答案 1 :(得分:0)
使用GROUP BY语句使用指定的列将多个行组合在一起。
Select
o.Id,
o.Date,
pc.Name,
From Order o
JOIN OrderLine ol on o.Id = ol.Order_Id
JOIN ProductCategory pc on ol.ProductCategory_Id = pc.Id
WHERE
pc.ID in ('1000','1001', '1002')
GROUP BY o.id, o.date, pc.Name