我需要有关sql查询的帮助,我试图通过创建这个简单的例子来复制我的实际问题:
父母表:
id name parent_id
1 parent1 null
2 parent2 1
3 parent3 1
4 parent4 3
5 parent5 3
6 parent6 5
7 parent7 5
亲属表:
id name parent_id
1 relative1 2
2 relative2 3
3 relative3 4
4 relative4 5
5 relative5 7
父母表中有父母自己的父母列表。 Relatives表有一个parent_id列的亲戚列表。
我如何找到parent3的所有亲属,包括parent3的所有'desendants',即查询应该从Relatives表中返回以下内容:
relative2(因为父ID是3)
relative3(因为父ID为4,其父ID为3)
relative4(因为父ID是5,其父ID是3)
relative5(因为父ID为7,其父ID为5,其父ID为3)
我正在使用SQL Server 2008。 希望有意义,任何帮助都表示赞赏。
答案 0 :(得分:0)
试试这个
;WITH CTE
AS
(
SELECT [id], [name] FROM Parents WHERE [name] = 'parent3'
UNION ALL
SELECT T1.[id], T1.[name] FROM CTE c
INNER JOIN Parents T1 ON c.[id] = T1.[parent_id]
)
SELECT * FROM Relatives
WHERE [parent_id] IN (SELECT [id] FROM CTE)