2010-05-18 24 views

回答

4

要實現遞歸查詢,您需要一個Common Table Expression(CTE)。 該查詢計算所有父節點的祖先。既然我們只想要最高級別,我們選擇level = 0的地方。

WITH RECURSIVE Ancestors AS 
(
    SELECT id, parent, 0 AS level FROM YourTable WHERE parent IS NULL 
    UNION ALL 
    SELECT child.id, child.parent, level+1 FROM YourTable child INNER JOIN 
     Ancestors p ON p.id=child.parent 

) 
SELECT * FROM Ancestors WHERE a.level=0 AND a.id=C 

如果您想要獲取所有數據,請使用ID上的內連接,例如,

SELECT YourTable.* FROM Ancestors a WHERE a.level=0 AND a.id=C 
    INNER JOIN YourTable ON YourTable.id = a.id 
+0

我認爲這只是直接父和水平。 我在http://pastebin.com/epjG28YW中粘貼了此查詢的結果 – 2016-04-20 21:22:06

1
WITH RECURSIVE q AS 
     (
     SELECT m 
     FROM mytable m 
     WHERE id = 'C' 
     UNION ALL 
     SELECT m 
     FROM q 
     JOIN mytable m 
     ON  m.id = q.parent 
     ) 
SELECT (m).* 
FROM q 
WHERE (m).parent IS NULL