0

我需要有关 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

父母表有一个父母名单,他们自己也有父母。亲属表有一个带有 parent_id 列的亲属列表。

我如何找到 parent3 的所有亲属,包括 parent3 的所有“后代”,即查询应该从亲属表中返回以下内容:

relative2(因为父 id 是 3)

relative3(因为父 id 为 4,其父 id 为 3)

relative4(因为父 id 为 5,其父 id 为 3)

relative5 (因为父 id 为 7,其父 id 为 5,其父 id 为 3)

我正在使用 SQL Server 2008。希望这是有道理的,任何帮助表示赞赏。

4

1 回答 1

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)

SQL 小提琴演示

于 2013-08-15T16:45:11.267 回答