0

鉴于这些表:

GroupA,

GroupB(with a FK to GroupA.Id),

GroupC (with a FK to GroupB.Id and Image.Id),

Image 

我正在尝试使用嵌套选择循环遍历每个 A 组,选择第一个具有匹配 FK 的 GroupB,选择 B 组的第一个 C 组,然后从图像表中选择一个字段。

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

<h2>GroupA.Title...

<img src=Images.ImageUrl...

但要做到这一点,我需要拉出 Top GroupB,后者拉出 Top Group C,后者在 Inner Join 上获取图像。

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

编辑:示例数据结构

GroupA {GroupAId,Title}

GroupB {GroupBId,FKGroupAId}

GroupC {GroupCId,FKGroupBId, FKImageId}

Image {ImageId,ImageUrl}

所以....如果它们是单独的查询,我可以

从 GroupA 中选择 * - 并遍历 GroupA 并选择单个 Top 1 GroupB 其中 GroupB.FKGroupAId = GroupA.GroupAId;

然后,我将选择前 1 个组 C,其中 GroupC.FKGroupBID = GroupB.GroupBId 与 Image 上的内部连接。

对于我想要获得的每个 GroupA 图像,这是 2 次选择 = 太多。

4

1 回答 1

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

没有子查询也可能有更好的方法。

于 2012-09-14T14:59:23.013 回答