2014-10-09 63 views
1

Peewee可以執行以下recursive CTE query嗎?Peewee + sqlite可以做一個遞歸的CTE查詢嗎?

該代碼創建表示樹結構的自引用表,查詢查找一個元素的所有父項。 (我是一名SQL初學者,歡迎提供任何改進建議)。

CREATE TABLE Parts ( 
    Id  INTEGER PRIMARY KEY, 
    Desc  TEXT, 
    ParentId INTEGER 
); 

INSERT INTO Parts VALUES (1, 'CEO',     NULL); 
INSERT INTO Parts VALUES (2, 'VIP Sales',   1); 
INSERT INTO Parts VALUES (3, 'VIP Operations',  1); 
INSERT INTO Parts VALUES (4, 'Sales Manager Europe', 2); 
INSERT INTO Parts VALUES (5, 'Sales Manager USA', 2); 
INSERT INTO Parts VALUES (6, 'Sales Rep Europe 1', 4); 
INSERT INTO Parts VALUES (7, 'Sales Rep Europe 2', 4); 
INSERT INTO Parts VALUES (8, 'Sales Rep USA 1',  5); 
INSERT INTO Parts VALUES (9, 'Sales Rep USA 2',  5); 

WITH RECURSIVE Cte (
    Level, 
    Id, 
    Desc, 
    ParentId, 
    ParentDesc 
) AS (
    SELECT 0, 
      Child.Id, 
      Child.Desc, 
      Parent.Id, 
      Parent.Desc 
     FROM Parts AS Child 
      JOIN Parts AS Parent ON Child.ParentId = Parent.Id 
    WHERE Child.Desc = 'Sales Rep USA 1' 

    UNION ALL 

    SELECT Cte.Level + 1, 
      Child.Id, 
      Child.Desc, 
      Parent.Id, 
      Parent.Desc 
     FROM Parts as Child, Cte 
      JOIN Parts AS Parent ON Child.ParentId = Parent.Id 
    WHERE Child.Id = Cte.ParentId 
) 
SELECT * FROM Cte; 

回答