如何检索具有5个特定特征的员工列表?

时间:2016-11-21 18:39:58

标签: sql sql-server

我有一张表EmpTraits,其中列出了员工及其特征。因此,此表将列出每个员工及其所有特征(只要特征不同,员工就可以多次列出,因此该表没有2个具有相同员工和相同特征的记录)。

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

假设我有一个名为EmpXTraits的VIEW(员工X特征),它只列出了员工X拥有的所有特征(总共5个)。

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

从这两个表中,我正在尝试查询具有VIEW EmpXTraits中显示的所有特征的所有EmployeeID的列表。

到目前为止,我有以下查询,但问题是显示员工与员工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具有的所有特征,他们就可以拥有更多特征)。

谢谢!

2 个答案:

答案 0 :(得分: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);

答案 1 :(得分: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

我认为这样可以解决问题。