2016-07-05 54 views
0

我有父母和孩子信息的SQL表像獲取層次結構表最終母公司

child parent 
--------------- 
    a  b 
    b  c 
    c  d 
    e  f 

我的結果應該是像

child parent 
--------------- 
    a  d 
    b  d 
    c  d 
    e  f 

每一行中應該有孩子,其最終母公司及其層次結構。

我怎麼能在SQL Server中做到這一點?

+0

'這是哪種RDBMS?請添加一個標籤來指定您是使用'mysql','postgresql','sql-server','oracle'還是'db2' - 或者其他的東西。 –

+0

如果您使用支持[現代SQL](http://modern-sql.com/slides)的DBMS,則可以使用遞歸公用表表達式。查看標有[tag:recursive-query]的解決方案 –

+0

我正在使用sql server –

回答

0

是的,有可能使用遞歸CTE。這是一個示例。

declare @tbl table(child varchar(5), parent varchar(5)) 
insert @tbl values 
    ('a',  'b'), 
    ('b',  'c'), 
    ('c',  'd'), 
    ('e',  'f') 

    ;with tbl as (
    --anchor query 
    --find starting level 
    select parent child, parent parent, 0 lvl 
    from @tbl t 
    where parent not in (select child from @tbl) 
    union all 
    --recursive query 
    select t.child, tbl.parent, lvl+1 --keep top level parent 
    from @tbl t 
    inner join tbl on t.parent=tbl.child --go up the tree to previous level 
) 
    --filter final results 
    select child,parent from tbl 
    where lvl>0 --lvl 0 is fake level 
    order by child 
+0

非常感謝 –