11

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

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

我的参数是 106。使用该参数,我想检索其父级 101 下的所有其他子级。我尝试使用递归方法,但在给出以下数据时它不起作用。是否有另一种方式来制定查询?

4

4 回答 4

16

假设您想获得value 的兄弟姐妹@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 小提琴示例


既然您提到了递归,也许您希望整个树从 value 的父级开始@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 Fiddle 示例使用您的数据其他数据来演示递归 CTE

于 2013-09-27T02:50:30.957 回答
7

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

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

问候

于 2014-01-17T16:45:40.953 回答
-1
select child
from my_table T1
where exists (select 1 from my_table T2 where child = @parameter and T1.parent = T2.parent)
于 2013-09-27T02:40:44.953 回答
-2
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
于 2017-01-06T13:56:13.047 回答