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 回答