0

特定の親 ID の下にあるすべての子エントリ (およびその子など) を返す必要があるクエリを作成しています。

例えば:

SELECT id
FROM table
WHERE parent_id IN

    (SELECT id
    FROM table
    WHERE parent_id IN

        (SELECT id
        FROM table
        WHERE parent_id IN

            (SELECT id
            FROM table
            WHERE code = 'A01')
        )
    )

予想どおり、これは最上位のSELECTクエリの結果セットのみを返します。UNION SELECT子レベルごとに書くことはできますが、それは少し不器用に思えます...

ネストされた各クエリの個々の結果セットをメインの結果セットに追加する方法はありますか? または、不器用なオプションを使用する必要がありますか?

4

1 に答える 1

3

あなたの問題は、再帰クエリで解決するのが最善です。SQL Server 2005 以降で再帰クエリを実行する優れた方法は、共通テーブル式を使用することです。

;with cte as (
    SELECT id, parent_id
    FROM [table]
    WHERE code = 'A01'

    UNION ALL

    SELECT t.id, t.parent_id
    FROM [table] t
        INNER JOIN cte 
            ON cte.id = t.parent_id
)
SELECT id 
FROM cte
OPTION (MAXRECURSION 0);

余談ですが... テーブル名がtable.

于 2012-06-28T14:48:57.323 に答える