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