2011-10-04 80 views
1

如果我有一個如下所示的樹查詢,我想篩選Name ='Son'並選擇所有的父記錄,所以結果應該產生前3行。我將如何構建我的查詢?我讀過我應該使用公用表表達式(CTE),但我是CTE上的新手。誰能幫我?謝謝。過濾SQL樹查詢

select 1 AS id, NULL AS parent, 'God' AS name 
    UNION 
    select 2 AS id, 1 AS parent, 'Father' AS name 
    UNION 
    select 3 AS id, 2 AS parent, 'Son' AS name 
    UNION 
    select 4 AS id, NULL AS parent, 'Godmother' AS name 
    UNION 
    select 5 AS id, 4 AS parent, 'Mother' AS name 
+1

您使用的是什麼數據庫引擎和版本? – Lamak

+0

http://stackoverflow.com/questions/7651686/recursive-query-to-find-the-parent-record/ – Magnus

回答

1

聽起來像是你可以存儲在一個表中的樹(或使用上面的SQL定義視圖),然後如果你使用的是Oracle,您可以使用CONNECT BY功能來篩選記錄。

0

這是你在找什麼?

;with SomeCTE as 
(
select * 
from (
select 1 AS id, NULL AS parent, 'God' AS name  
UNION  
select 2 AS id, 1 AS parent, 'Father' AS name  
UNION  
select 3 AS id, 2 AS parent, 'Son' AS name  
UNION  
select 4 AS id, NULL AS parent, 'Godmother' AS name  
UNION  
select 5 AS id, 4 AS parent, 'Mother' AS name) as a 
) 
select * 
from SomeCTE a 
left join SomeCTE b 
on a.parent = b.id 
left join SomeCTE c 
on b.parent = c.id 
where a.name = 'son'