我的数据库中有以下数据:
- 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小提琴示例using your data和
with additional data to demonstrate the recursive CTE