SQL选择它们不能一起工作的所有ID号对

时间:2018-04-24 13:11:05

标签: mysql sql relational-database

给出以下表格的表格:

EMPLOYEE: ID, ProjectNum, Hours

ID和ProjectNum一起组成主键,我希望能够输出所有ID号对,这样它们就不能在任何项目上一起工作(员工可以在多个项目上工作)

我相信这可以通过表格与自身的某种联接来完成,但我正在努力解决如何仅在ProjectNum1<>中输出结果的问题。 ProjectNum2显然可能是一个项目而不是另一个项目。

1 个答案:

答案 0 :(得分:2)

您搜索所有对,并过滤在一个项目中一起工作的那些。

SELECT DISTINCT
       e1.id as emp1, 
       e2.id as emp2
FROM Employee e1
JOIN Employee e2
  ON e1.id < e2.id
WHERE not exist ( SELECT 1
                  FROM Employee r1
                  JOIN Employee r2
                    ON r1.id < r2.id
                   AND r1.ProjectNum = r2.ProjectNum 
                   AND e1.ID = r1.ID
                   AND e2.ID = r2.ID
                )

您使用e1.id < e2.id代替e1.id <> e2.id,因此您不会获得反对