首页 > 解决方案 > SQL 选择它们不一起工作的所有 ID 号对

问题描述

给定以下形式的表格:

EMPLOYEE: ID, ProjectNum, Hours

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

我相信这可以通过某种形式的表连接来完成,但我正在努力解决如何只输出 ProjectNum1 <> ProjectNum2 的结果,因为显然这可能是一个项目的情况,而不是另一个项目。

标签: mysqlsqlrelational-database

解决方案


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

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这样你就不会得到反转对


推荐阅读