我有一个表格EmpTraits
,里面列出了员工及其特征。因此,此表将列出每个员工及其所有特征(只要特征不同,就可以多次列出员工,因此此表没有 2 条具有相同员工和相同特征的记录)。
`Table: EmpTraits
+------------+---------+
| EmployeeID | TraitID |
+------------+---------+`
假设我有一个名为EmpXTraits
(员工X特征)的VIEW,它只列出了员工X具有的所有特征(总共5个)。
`Table: EmpXTraits
+------------+---------+
| EmployeeID | TraitID |
+------------+---------+
| X + 1 +
| X + 2 +
| X + 3 +
| X + 4 +
| X + 5 +
+------------+---------+`
从这两个表中,我尝试查询具有 VIEWEmpXTraits
中显示的所有特征的所有 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 拥有的所有特征,他们就可以拥有更多特征)。
谢谢!!
请尝试以下操作。(无需事先知道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);
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
我认为这将解决问题。