如何从mssql中的一个到多个相关表中获取每个id的单个记录

问题描述 投票:1回答:1

我有一对多的相关表格;产品表及其每个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表中获取单个记录?

sql sql-server group-by one-to-many
1个回答
0
投票

使用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
© www.soinside.com 2019 - 2024. All rights reserved.