wai*_*ine 8 sql sql-server hierarchy
我的数据库中有以下数据:
Parent Child
101 102
101 103
101 104
101 105
101 106
Run Code Online (Sandbox Code Playgroud)
我的参数是106.并且使用参数我想要检索其父级下的所有其他子项,即101.我尝试使用递归方法但是在给定以下数据的情况下它不起作用.还有另一种方法来制定查询吗?
lc.*_*lc. 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
Run Code Online (Sandbox Code Playgroud)
这里不等于的条款确保你让兄弟姐妹不包括你搜索的值.必要时将其取下.
既然你提到了递归,也许你希望整个树从值的父级开始@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
Run Code Online (Sandbox Code Playgroud)
SQL Fiddle示例使用您的数据和 附加数据来演示递归CTE
SQL Authority 有一个博客,很好地解释了如何使用递归 CTE 执行分层查询
问候
Vul*_*nos -1
select child
from my_table T1
where exists (select 1 from my_table T2 where child = @parameter and T1.parent = T2.parent)
Run Code Online (Sandbox Code Playgroud)