2016-03-15 83 views
-4

我有一個用戶表與下面的架構,我如何獲得ID爲管理人員名單?

UserId, Name, ManagerId 

該經理ID,不過是一個用戶ID作爲管理者也是一個用戶。

我可以得到經理使用下面的查詢列表,但我如何得到managerId與名稱?

Select DISTINCT(ManagerId) from Users 
group by ManagerId 

我想下面的輸出

ManagerId, Name 

回答

3

試試這個:

SELECT UserId, Name 
FROM Permission 
WHERE UserId IN (Select DISTINCT ManagerId FROM Permission) 

還可能有JOIN

SELECT UserId, Name 
FROM Permission AS p1 
JOIN (Select DISTINCT ManagerId FROM Permission) AS p2 
    ON p1.UserId = p2.MAnagerId 
+0

這應該是最有效的方法? – NoobDeveloper

+0

我認爲第二個查詢比第一個查詢更高效。 –

0

我相信你想找回誰是用戶經理。

SELECT DISTINCT UserId, Name 
FROM Permission p1 
WHERE EXISTS (
    SELECT 1 
    FROM Permission p2 
    WHERE p1.UserId = p2.ManagerId 
) 

DISTINCT子句是可選的,並且可以根據您的數據是多餘的:這可以通過使用EXISTS子句來完成。如果是這種情況,請移除它以提升性能(不同的是需要對輸入進行排序,然後刪除重複項)。

0

我不確定是否將INDISTINCT一起使用是個好主意,例如Giorgos建議的。 SQL Server有一個很好的優化引擎,但是我對這樣的語句有不好的經驗。

更好地利用EXISTS

SELECT P1.UserId, P1.Name 
FROM Permission AS P1 
WHERE EXISTS (
     SELECT * 
     FROM Permission AS P2 
     WHERE P2.ManagerId = P1.UserId 
     ); 

請記住,這將是對Permission表的索引,其中第一個索引列將UserId,而在另一個指標ManagerId一個好主意。這種方式EXISTS將非常有效地執行。

相關問題