SQL查询:需要帮助

时间:2013-08-15 14:42:39

标签: sql sql-server-2008

我需要有关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。 希望有意义,任何帮助都表示赞赏。

1 个答案:

答案 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)

SQL FIDDLE DEMO