2011-11-21 170 views
0

我有擁有自營關係的表:表自相關查詢

ID - parentId的列

我需要一個查詢來獲取父行,其中的parentId爲空,但我想不出走出這樣做的正確方式。

select * from table1 where id = parentId; 

顯然這是行不通的,它只會給直接的父母。

任何幫助

+1

這沒有意義:「獲取parentId爲null的父行」 - 如果parentId爲null,是不是表示沒有父行? – driis

+0

你可以用遞歸CTE來完成它:http://msdn.microsoft.com/en-us/library/ms186243.aspx –

+1

@driis:我認爲他的意思是得到「超級」 - 父母。父母的父母,直到沒有父母。 –

回答

1

「獲取父行,其中parentId的爲空」是沒有意義的,但如果你實際上意味着「得父行直到的parentId的爲空」,那麼這個遞歸CTE應該做的伎倆:

WITH cte AS (
    SELECT * FROM table1 WHERE id = 7 
    UNION ALL 
    SELECT table1.* FROM table1 JOIN cte ON table1.id = cte.parentId 
) 
SELECT * FROM cte 

這與ID = 7及其全部返回行ncestors遞歸地。根據您的需要更換7個。

0
SELECT * 

FROM table1 AS A 

LEFT JOIN table1 as B 
    ON B.ID = A.parentID 

WHERE B.parentID IS NULL 
+0

它沒有帶來所有結果 某些行丟失的地方 – Star

+1

也許添加你正在尋找的東西的例子:) – Gixonita