SQL select 所有不能一起使用的 ID 号对
SQL select all pairs of ID numbers where they do not work together
给定以下形式的 table:
EMPLOYEE: ID, ProjectNum, Hours
ID 和 ProjectNum 一起构成主键,我希望能够输出所有 ID 号对,这样它们就不会在任何项目上一起工作(一个员工可以在多个项目上工作)项目)。
我相信这可以通过 table 自身的某种连接来完成,但我正在努力研究如何只输出 ProjectNum1 <> ProjectNum2 的结果,因为很明显这可能是这种情况对于一个项目而不是另一个项目。
您搜索所有配对,并筛选在一个项目中一起工作的配对。
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
这样你就不会得到倒置的对
给定以下形式的 table:
EMPLOYEE: ID, ProjectNum, Hours
ID 和 ProjectNum 一起构成主键,我希望能够输出所有 ID 号对,这样它们就不会在任何项目上一起工作(一个员工可以在多个项目上工作)项目)。
我相信这可以通过 table 自身的某种连接来完成,但我正在努力研究如何只输出 ProjectNum1 <> ProjectNum2 的结果,因为很明显这可能是这种情况对于一个项目而不是另一个项目。
您搜索所有配对,并筛选在一个项目中一起工作的配对。
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
这样你就不会得到倒置的对