使用MSSQL查询获取父级的所有子级

时间:2013-09-27 02:35:17

标签: sql sql-server hierarchy

我的数据库中有以下数据:

Parent      Child
101         102
101         103
101         104
101         105
101         106

我的参数是106.并且使用参数我想要检索其父级下的所有其他子项,即101.我尝试使用递归方法但是在给定以下数据的情况下它不起作用。还有另一种方法来制定查询吗?

4 个答案:

答案 0 :(得分:16)

假设您想获得值为@p0兄弟姐妹,您可以使用简单的自我加入:

SELECT p.Child
FROM Table1 c
INNER JOIN Table1 p ON c.Parent = p.Parent
WHERE c.Child = @p0
AND p.Child <> @p0

此处不等的条款确保您的兄弟姐妹不包括您搜索的值。必要时将其删除。

SQL Fiddle example


既然你提到了递归,也许你希望整个树从值@p0的父元素开始。在这种情况下,您可以使用递归CTE:

WITH parent AS (
    SELECT Parent
    FROM Table1
    WHERE Child = @p0
), tree AS (
    SELECT x.Parent, x.Child
    FROM Table1 x
    INNER JOIN parent ON x.Parent = parent.Parent
    UNION ALL
    SELECT y.Parent, y.Child
    FROM Table1 y
    INNER JOIN tree t ON y.Parent = t.Child
)
SELECT Parent, Child
FROM tree

SQL小提琴示例using your datawith additional data to demonstrate the recursive CTE

答案 1 :(得分:4)

SQL Authority有一个博客,非常好地解释了如何使用递归CTE执行分层查询

http://blog.sqlauthority.com/2012/04/24/sql-server-introduction-to-hierarchical-query-using-a-recursive-cte-a-primer/

此致

答案 2 :(得分:-1)

select child
from my_table T1
where exists (select 1 from my_table T2 where child = @parameter and T1.parent = T2.parent)

答案 3 :(得分:-1)

WITH parent AS (
    SELECT Parent
    FROM Table1
    WHERE Child = @p0
), tree AS (
    SELECT x.Parent, x.Child
    FROM Table1 x
    INNER JOIN parent ON x.Parent = parent.Parent
    UNION ALL
    SELECT y.Parent, y.Child
    FROM Table1 y
    INNER JOIN tree t ON y.Parent = t.Child
)
SELECT Parent, Child
FROM tree