Sql server 为每个记录选择顶级子项的顶级子项
鉴于这些表格:Sql server 为每个记录选择顶级子项的顶级子项,sql-server,sql-server-2012,Sql Server,Sql Server 2012,鉴于这些表格: GroupA, GroupB(with a FK to GroupA.Id), GroupC (with a FK to GroupB.Id and Image.Id), Image 我尝试使用嵌套选择循环遍历每个组A,选择带有匹配FK的第一个组B,选择组B的第一个组C,然后从Images表中选择一个字段,但失败了 这是一个网页,我将为每个GroupA输出以下内容 <h2>GroupA.Title... <img src=Images.ImageUr
GroupA,
GroupB(with a FK to GroupA.Id),
GroupC (with a FK to GroupB.Id and Image.Id),
Image
我尝试使用嵌套选择循环遍历每个组A,选择带有匹配FK的第一个组B,选择组B的第一个组C,然后从Images表中选择一个字段,但失败了
这是一个网页,我将为每个GroupA输出以下内容
<h2>GroupA.Title...
<img src=Images.ImageUrl...
所以。。。。
如果它们是分开的,我可以
从GroupA中选择*并在GroupA中循环,然后选择一个Top 1 GroupB,其中GroupB.FKGroupAId=GroupA.GroupAId
然后我会选择前1个C组,其中GroupC.FKGroupBID=GroupB.GroupBId,图像上有一个innerjoin
我想得到的每个GroupA图像有2个选择=太多。像这样的东西能满足你的需要吗
SELECT a.Id, (
SELECT TOP 1 i.myColumn
FROM GroupB b
INNER JOIN GroupC c ON b.id = c.bId
INNER JOIN Image i ON c.imageid = i.id
WHERE a.id = b.aId
ORDER BY b.id, c.id
) AS myColumn
FROM GroupA a
如果不使用子查询,可能还有更好的方法。请提供示例数据和所需输出。您如何对b组和c组中的行进行排序?是否有一个独立的排序字段,或者是否需要max(b.id)和max(c.id)?@Beth-任何来自b和c的记录都可以。我只是想选一张最好的唱片
SELECT a.Id, (
SELECT TOP 1 i.myColumn
FROM GroupB b
INNER JOIN GroupC c ON b.id = c.bId
INNER JOIN Image i ON c.imageid = i.id
WHERE a.id = b.aId
ORDER BY b.id, c.id
) AS myColumn
FROM GroupA a