我在我的数据库中有以下数据:
Parent Child
101 102
101 103
101 104
101 105
101 106
我的参数是106。我想使用该参数检索其父级101下的所有其他子级。我尝试使用递归方法,但由于以下数据,它没有起作用。是否有另一种方式来制定查询?
我在我的数据库中有以下数据:
Parent Child
101 102
101 103
101 104
101 105
101 106
我的参数是106。我想使用该参数检索其父级101下的所有其他子级。我尝试使用递归方法,但由于以下数据,它没有起作用。是否有另一种方式来制定查询?
@p0
的兄弟节点,您可以使用简单的自连接:SELECT p.Child
FROM Table1 c
INNER JOIN Table1 p ON c.Parent = p.Parent
WHERE c.Child = @p0
AND p.Child <> @p0
由于你提到了递归,也许你想要从值@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
SQL Authority的博客有一个非常好的解释,介绍如何使用递归CTE执行分层查询。
祝好
select child
from my_table T1
where exists (select 1 from my_table T2 where child = @parameter and T1.parent = T2.parent)
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