2016-11-21 34 views
1

我有一張表EmpTraits與員工及其特徵的列表。因此,此表將列出每個員工及其所有特徵(只要特質不同,員工可以多次列出,因此此表沒有具有相同員工和相同特徵的2條記錄)。如何檢索具有5個特定特徵的員工列表?

`Table: EmpTraits 
+------------+---------+ 
| EmployeeID | TraitID | 
+------------+---------+` 

比方說,我有一個名爲EmpXTraits(員工X性狀)VIEW僅列出所有的特質員工X具有(這是一個總的5)。

`Table: EmpXTraits 
+------------+---------+ 
| EmployeeID | TraitID | 
+------------+---------+ 
|  X  + 1 + 
|  X  + 2 + 
|  X  + 3 + 
|  X  + 4 + 
|  X  + 5 + 
+------------+---------+` 

從這兩個表,我想查詢有所有在VIEW EmpXTraits所示的性狀的所有EmployeeIDs的列表。

到目前爲止,我有以下查詢,但問題是顯示員工具有與員工X完全相同的特徵。因此,如果另一名員工具有所有這些類似特徵和更多,他不會出現。

` 
SELECT DISTINCT EmpTraits.EmployeeID 
FROM EmpTraits INNER JOIN EmpXTraits ON 
     EmpTraits.EmployeeID = EmpXTraits.EmployeeID 
WHERE EmpTraits.TraitID IN (
     SELECT EmployeeID 
     FROM EmpXTraits 
);` 

任何想法如何,我可以改變這個查詢,以顯示誰擁有至少從員工X性狀的所有員工(他們只要他們有員工X擁有所有性狀有更多的特質)。

謝謝!

+1

您需要的關係運算符被稱爲[關係部門(https://www.simple-talk.com/sql/t-sql -programming /分 - 我們 - 擱置 - 在-SQL的關係劃分/)。 – onedaywhen

回答

2

請嘗試以下操作。 (無需事先知道有多少特徵是在EmpXTraits)

SELECT DISTINCT ee.EmployeeID 
    FROM EmpTraits AS ee 
WHERE NOT EXISTS (SELECT x.TraitID FROM EmpXTraits AS x 
        EXCEPT 
        SELECT e.TraitID FROM EmpTraits AS e 
        WHERE e.EmployeeID = ee.EmployeeID); 
+0

謝謝!這工作正如我所料。直到現在我還沒有意識到EXCEPT函數,所以也非常感謝你。 – MR04

1
SELECT EmpTraits.EmployeeID, Count(EmpTraits.TraitID) 
FROM EmpTraits 
INNER JOIN EmpXTraits ON EmpTraits.EmployeeID = EmpXTraits.EmployeeID 
Group BY EmpTraits.EmployeeID 
Having Count(EmpTraits.TraitID) > 4 

我認爲這樣做會有效果。

+0

先生正面,不幸的是這不符合我的預期。 wdosanjos提供了一個很好的解決方案。 – MR04