我有一张表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具有的所有特征,他们就可以拥有更多特征)。
谢谢!
答案 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
我认为这样可以解决问题。