0
我有一個任務和子任務的PostgreSQL數據庫。這裏是我的遞歸CTE聲明:什麼是在SQL中使用遞歸CTE進行別名的正確語法?
WITH RECURSIVE getchildren (childname, childid, parentid, parentname) AS (
SELECT child.name,child.id,child.parent,parent.name
FROM lists child, lists parent
WHERE child.parent=parent.id AND parent.id=30
UNION ALL
SELECT l.name,l.id,l.parent,g.childname
FROM lists l, getchildren g
WHERE l.parent=g.childid
)
SELECT childid,childname,parentid,parentname
FROM getchildren;
這裏是輸出:
childid | childname | parentid | parentname
---------+-----------------------------+-------------+-----------------
46 | Fix Escaped Chars | 30 | List Program
51 | Add Comments | 30 | List Program
47 | Rename Task | 30 | List Program
36 | Dependencies | 30 | List Program
34 | Obfuscate ID | 30 | List Program
37 | Move Task | 36 | Dependencies
82 | Second Order | 36 | Dependencies
38 | Reorder | 36 | Dependencies
83 | Third Order | 82 | Second Order
我想要的操作集成到刪除的結果,同時也是父母的聲明:換句話說,只顯示「樹葉'。
如果是後者查詢的輸出是一個表,或者如果我後臺處理結果到一個名爲「temptab」臨時表,我想運行這樣的查詢:
select childname from temptab where childname not in (select parentname from temptab);
取得成果像這樣:
childid | childname | parentid | parentname
---------+-----------------------------+-------------+-----------------
46 | Fix Escaped Chars | 30 | List Program
51 | Add Comments | 30 | List Program
47 | Rename Task | 30 | List Program
34 | Obfuscate ID | 30 | List Program
37 | Move Task | 36 | Dependencies
38 | Reorder | 36 | Dependencies
83 | Third Order | 82 | Second Order
我可以將第一個遞歸CTE查詢別名並將這兩個查詢合併爲一個嗎?