2011-11-21 84 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