0

これらのテーブルを考えると:

GroupA,

GroupB(with a FK to GroupA.Id),

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

Image 

ネストされた選択で各グループAをループし、FKが一致する最初のグループBを選択し、グループBの最初のグループCを選択してから、[画像]テーブルからフィールドを選択しようとして失敗しました。

これは、GroupAごとに以下を出力するWebページ用です。

<h2>GroupA.Title...

<img src=Images.ImageUrl...

ただし、そのためには、内部結合で画像を取得するトップグループCをプルするトップグループBをプルする必要があります。

ネストされた選択は前向きではないと確信しています(最初のネストされたステートメントは機能しますが、最初のネストされたステートメントの結果を使用する次のステートメントは機能しません)。誰かが私を正しい方向に向けることができますか?これを行う適切な方法があると確信しています。

編集:サンプルデータ構造

GroupA {GroupAId,Title}

GroupB {GroupBId,FKGroupAId}

GroupC {GroupCId,FKGroupBId, FKImageId}

Image {ImageId,ImageUrl}

だから....もしそれらが別々のクエリだったら私は

GroupAから*を選択し、GroupAをループして、GroupB.FKGroupAId=GroupA.GroupAId;である単一のトップ1GroupBを選択します。

次に、トップ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 に答える