すべて私がデータ戻りMS SQLでの再帰CTEを使用して、非リーフノード
id name mgtId
--------------------------
1 joe null
2 jack 1
3 jill 1
4 paul 2
5 ron 4
6 sam 2
を持つテーブルを持っているが参照IDをmgtId。 CTEを使用して、非葉ノード(joe、jack、paul)を選択するにはどうすればよいですか。
すべて私がデータ戻りMS SQLでの再帰CTEを使用して、非リーフノード
id name mgtId
--------------------------
1 joe null
2 jack 1
3 jill 1
4 paul 2
5 ron 4
6 sam 2
を持つテーブルを持っているが参照IDをmgtId。 CTEを使用して、非葉ノード(joe、jack、paul)を選択するにはどうすればよいですか。
select *
from table
where id in (select mgtId from table)
私は思っていません... – therealmitchconnors
ルートノードを選択しません – Naveen
あなたがリクエストしたのと同じように、このクエリはjoe、jack、paulを選択します。 – therealmitchconnors
一つの方法:
;with parents_id as (
select distinct mgtId as id
from your_table
)
select *
from your_table t
inner join parants_id p on t.id = p.id
25 aprl 2012
を更新し
私はtest above queryに来て、それが動作しても、ルートノードを返します。
select *
into #your_table
from (
select 1 as id, 'joe' as name, null as mgtId union all
select 2, 'jack ', 1 union all
select 3, 'jill ' , 1 union all
select 4, 'paul ' , 2 union all
select 5, 'ron ' , 4 union all
select 6, 'sam' , 2 ) T
;with parents_id as (
select distinct mgtId as id
from #your_table
)
select *
from #your_table t
inner join parents_id p on t.id = p.id
結果:
(mgr_emp から選択ID、mgtId)としてCTE 選択b.id、b.name有するid name mgtId id
-- ------- ----- --
1 joe null 1
2 jack 1 2
4 paul 2 4
、b.mgtId、右に B mgr_empに参加CTEからa.mgtId b.mgtId = A .id
なぜあなたは再帰的ソリューションを必要としますか? –