階層データを含むテーブルがあります。
ID Name ParentID
--- --------- ---------
1 Alpha 2
2 Beta 3
3 Gamma NULL
4 Delta 2
5 Epsilon 6
6 Zeta NULL
7 Eta 1
8 Theta NULL
ID のリストが与えられた場合、すべての一意のルートの親 ID のリストを取得するにはどうすればよいですか? 私は中間の親を望んでいません。
たとえば、与えられた ID のリストが であるとし1, 2, 3, 4, 5
ます。私が探している結果は次のとおりです。
ID
---
3
6
明らかに、これにはある種の再帰クエリが必要です。共通テーブル式 (CTE) を使用して達成できる可能性があると思いますが、それがどのように行われるかについて頭を悩ませています。これまでに見たすべての例は、すべての子と親をまとめて階層の完全なリストを作成しているように見えますが、これは私が探しているものではありません。正しい方向へと導いてくれる SQL の達人はいますか? データベースへの複数のクエリを使用してこれを繰り返し実行できることはわかっていますが、それに頼る必要がないことを望んでいます。
SQL Server 2008 を使用していることに注意してください。