如何遍历“父”和子“行在同一个表中的SQL表

时间:2012-07-30 11:34:54

标签: sql sql-server sql-server-2008-r2

在表格中有列ID,标题和ParentID。 ParentID用于同一个表中被视为其父项的条目的ID - 因此ParentID为NULL的任何条目本身就是父条目。

我需要一个查询,它将遍历每个父项并列出其下面的任何子项(理想情况下用连字符或其他东西来表示其从属关系)是否有人知道如何做到这一点或如何指向正确的方向?< / p>

(我已经研究了T-SQL并阅读了许多类似的在线问题,但是我的SQL不够清晰,无法理解它,所以我非常感谢一些指针!)

2 个答案:

答案 0 :(得分:2)

你在这里!

WITH n(ID, Title) AS 
                    (SELECT ID, Title
                    FROM YourTable
                    WHERE ID = (SELECT TOP 1 ID FROM YourTable WHERE ParentID IS NULL)
                    UNION ALL 
                    SELECT nplus1.ID, nplus1.Title
                    FROM YourTable as nplus1, n 
                    WHERE n.ID = nplus1.ParentID) 
                    SELECT ID, Title FROM n

答案 1 :(得分:1)

要从自引用表中获取层次结构数据,可以在sql 2008中使用WITH语法

  WITH n(ID) AS 
   (SELECT ID FROM YourTable 
   UNION ALL 
   SELECT nplus1.ID
   FROM YourTable as nplus1, n 
   WHERE n.ID = nplus1.ParentID) 
   SELECT ID FROM n