2017-11-18 18 views
1

私はに似てセットアップされているテーブルがあります。自己参照テーブルのIDを取得するには?

1 AAA NULL 
2 BBB 1 
3 CCC 2 
4 DDD 1 
5 EEE 4 
6 FFF NULL 

どのように私はIDを取る機能(int型を書き込むことができます。

MyTable 
Id  INT 
Name  VARCHAR 
ParentId INT 

は今、このテーブル内のデータがどのように見えると言うことができますがすべての可能な子のIDのテーブルをその親に返しますか?

1 
2 
3 
4 
5 

はうまくいく関数を記述することができましたが、子どもたちが同じ同じ親をしなかった場合にのみ、しかし、私は必要があります:私は(1)SomeFunctionを呼び出してもらうことを期待する例えば

そのシナリオをサポートすることができます。

+0

ヒント:適切なソフトウェア(MySQL、Oracle、DB2など)とバージョンの両方にタグ付けすると便利です。 'sql-server-2014'です。構文と機能の相違は、しばしば答えに影響します。 'tsql'は選択肢を絞り込みますが、データベースは指定しないことに注意してください。 – HABO

答えて

0

これは、再帰的cteで行うことができます。

with children as 
(select id as child, parentid as parent 
from mytable 
where parentid is null 
union all 
select m.id, coalesce(c.parent,m.parentid) 
from mytable m 
join children c on m.parentid=c.child 
) 
select child 
from children 
where parent = 1 

Try the Demo

0

再帰CTEは、移動するための方法です。特定のIDのすべての子どものための簡単なバージョンは、

with children as (
     select id 
     from mytable 
     where id = 1 
     union all 
     select m.id 
     from mytable m join 
      children c 
      on m.parentid = c.id 
    ) 
select * 
from children