我有一对多的相关表格;产品表及其每个ProductID的图像。对于productID单个或多个或根本不存在图像。所以如果图像不存在,我将外部连接起来,记录将为空。
我按类别ID选择它们,这意味着也可以有其他产品,所以我不能使用前1。
我的查询:
select p.ID,p.ProductName,pc.CategoryID, pic.BigPath
from tbl_Products p
LEFT join tbl_ProductToCategory pc on p.ID = pc.ProductID
left outer join tbl_ProductImages pic on pic.ProductID = p.ID
where pc.CategoryID = 1174
由于表ProductImages,上面的查询获得具有多个记录的所有产品。
我需要从产品图像表中获取单个记录;例如:具有最小图像ID的一个。
上面的查询得到这些:
ID ProductName CategoryID BigPath
311 a 1174 www.blabla.com/cdn/a..
313 b 1174 www.blabla.com/cdn/b..
318 c 1174 www.blabla.com/cdn/c1..
318 c 1174 www.blabla.com/cdn/c2..
318 c 1174 www.blabla.com/cdn/c3..
我预计:
ID ProductName CategoryID BigPath
311 a 1174 www.blabla.com/cdn/a..
313 b 1174 www.blabla.com/cdn/b..
318 c 1174 www.blabla.com/cdn/c1..
如何从ProductImages表中获取单个记录?
使用row_number()
select * from
(
select p.ID,p.ProductName, p.SalesPrice, pc.CategoryID, pic.BigPath,
row_number() over(partition by p.ID,p.ProductName order by pic.BigPath) as rn
from tbl_Products p
LEFT join tbl_ProductToCategory pc on p.ID = pc.ProductID
left outer join tbl_ProductImages pic on pic.ProductID = p.ID
where pc.CategoryID = 1174
)A where rn=1