表自相关查询

时间:2011-11-21 17:57:47

标签: sql tsql

我有一张有自我关系的桌子:

id - parentId列

我需要一个查询来获取parentId为null的父行,但我无法弄清楚这样做的正确方法。

select * from table1 where id = parentId;

显然这不起作用,它只会给直接的父母。

任何帮助

2 个答案:

答案 0 :(得分:1)

“获取parentId为空的父行”是没有意义的,但是如果你实际上意味着“获取父行,直到,parentId是null“,那么这个递归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的行及其所有祖先的递归。根据您的需要更换7个。

答案 1 :(得分:0)

SELECT *

FROM table1 AS A

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

WHERE B.parentID IS NULL