为每条记录选择一个顶级子项的顶级子项

时间:2012-09-14 14:50:07

标签: 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的GroupB,选择组B中的第一个C组,然后从Images表中选择一个字段。

这是一个网页,我将为每个GroupA输出以下内容

<h2>GroupA.Title...

<img src=Images.ImageUrl...

但为了做到这一点,我需要拉出Top GroupB,它将拉出Top Group C,从而获得内部连接上的图像。

我非常确定嵌套选择不是前进的方式(第一个嵌套语句有效,但下一个嵌套语句不能使用第一个嵌套语句的结果)。有人能指出我正确的方向吗?我确信这是一种正确的方法。

编辑:示例数据结构

GroupA {GroupAId,Title}

GroupB {GroupBId,FKGroupAId}

GroupC {GroupCId,FKGroupBId, FKImageId}

Image {ImageId,ImageUrl}

因此.... 如果他们是单独的查询我可以

从GroupA中选择* - 并循环通过GroupA并选择一个Top1 GroupB,其中GroupB.FKGroupAId = GroupA.GroupAId;

然后我会选择前1组C,其中GroupC.FKGroupBID = GroupB.GroupBId,图像上带有内连接。

我想要得到的每个GroupA图像的2个选择=太多。

1 个答案:

答案 0 :(得分:0)

这样的事情能做你想做的吗?

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

如果没有子查询,可能还有更好的方法。