sql选择所有不在一起工作的id号对

q5lcpyga  于 2021-06-24  发布在  Mysql
关注(0)|答案(1)|浏览(373)

给出以下表格:

EMPLOYEE: ID, ProjectNum, Hours

如果id和projectnum一起构成主键,我希望能够输出所有的id号对,这样它们就不会在任何项目上一起工作(一个员工可以在多个项目上工作)。
我相信这可以通过表本身的某种连接来实现,但是我正在努力解决如何只输出projectnum1<>projectnum2的结果,因为很明显这可能是一个项目的情况,而不是另一个项目的情况。

roqulrg3

roqulrg31#

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

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 所以你不会得到相反的一对

相关问题