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

Parents テーブルには、親自身も持つ親のリストがあります。Relatives テーブルには、parent_id 列を持つ親戚のリストがあります。

親 3 のすべての「子孫」を含む親 3 のすべての親族を見つけるにはどうすればよいでしょうか。つまり、クエリは親族テーブルから次を返す必要があります。

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 に答える