2013-02-06 111 views
1

我試圖使用T-SQL的WITH創建分層查詢。例如,我想要做的是直接或間接地發現約翰是瑞安的老闆嗎?在層次結構中查找元素

如何爲此編寫查詢?

+0

閱讀上公共表表達式(通常簡稱爲 「CTE」) 。一旦你需要處理這些問題,請閱讀遞歸CTE :-) – Bridge

+0

發佈更多詳細信息,你的表格,你想要什麼結果,以及你嘗試了什麼...... –

回答

2
WITH BossOf AS(
    SELECT bossId, Id From Employees 
     UNION ALL 
    SELECT b.bossId, e.Id 
    FROM Employees AS e 
    INNER JOIN BossOf b ON b.Id = e.bossId 
) 
SELECT * FROM BossOf 
    WHERE Id = 'Ryan' 

正如你可以BossOf做一個例子...

WITH BossOf AS(
    SELECT bossId, Id From Employees 
     UNION ALL 
    SELECT b.bossId, e.Id 
    FROM Employees AS e 
    INNER JOIN BossOf b ON b.Id = e.bossId 
) 
SELECT * FROM Employees 
    WHERE Id IN (SELECT BossId 
        FROM BossOf 
        Where Id = 'Ryan') 

甚至

WITH BossOf AS(
    SELECT bossId, Id From Employees 
     UNION ALL 
    SELECT b.bossId, e.Id 
    FROM Employees AS e 
    INNER JOIN BossOf b ON b.Id = e.bossId 
) 
SELECT COUNT(*) FROM BossOf 
    WHERE Id = 'Ryan' 
    AND BossId = 'John' 
+0

但是,這個查詢返回組織的整個層次結構。我怎麼能限制樹只有瑞恩的老闆? – user2047824

+0

只要將BossOf視爲在下一個查詢後被拋出的SQL視圖。 – Aron

+0

請注意,在此代碼之前您可能需要一個明確的分號。 – Aron

相關問題