Sql 从子表联接前n个记录
我正在努力弄清楚如何在主-详细信息关系的父表中,每个记录只从子表中选择前4条记录 表格示例:Sql 从子表联接前n个记录,sql,sql-server,tsql,greatest-n-per-group,Sql,Sql Server,Tsql,Greatest N Per Group,我正在努力弄清楚如何在主-详细信息关系的父表中,每个记录只从子表中选择前4条记录 表格示例: Product ProductImage --------- ------------------- Id | Name PKeyFld1 | PKeyFld2 --------- ------------------- 1 | Apple 1 | 1 2 | Banana 1 |
Product ProductImage
--------- -------------------
Id | Name PKeyFld1 | PKeyFld2
--------- -------------------
1 | Apple 1 | 1
2 | Banana 1 | 2
3 | Cranberry 1 | 3
1 | 4
1 | 5
2 | 1
2 | 2
2 | 3
3 | 1
3 | 3
3 | 4
3 | 8
3 | 9
ProductImage的主键是所示两个字段的组合。我需要获得每个产品的前4张图片,由PKeyFld1、PKeyFld2订购,这将导致:
ProductImage
-------------------
PKeyFld1 | PKeyFld2
-------------------
1 | 1
1 | 2
1 | 3
1 | 4
2 | 1
2 | 2
2 | 3
3 | 1
3 | 3
3 | 4
3 | 8
最好的解决方案是每个产品只有一个查询和一条记录,但我也可以处理两个查询;1个用于产品,1个用于图像。在C语言中,我可以获取它们并在进一步处理之前将图像数据添加到模型中
有人能帮我查询productImages吗?难点在于每个产品只获取前4个图像,而不将整个ProductImage表限制为仅4条记录。我以前在Postgres上做过,但在SQL Server中找不到如何做。您可以使用row\u number来解决这个最大的n个组问题。至于关注点,您不需要涉及产品表
谢谢你的回复。同时,谢谢你告诉我,我应该搜索“最伟大的每群n”。我不知道那是搜索文本。
select PKeyFld1, PKeyFld2
from (
select t.*, row_number() over(partition by PKeyFld1 order by PKeyFld2) rn
from ProductImage t
) t
where rn <= 4
order by PKeyFld1, PKeyFld2