SQL выбирает все пары идентификационных номеров, где они не работают вместе - PullRequest
0 голосов
/ 24 апреля 2018

Дана таблица следующего вида:

EMPLOYEE: ID, ProjectNum, Hours

Если ID и ProjectNum вместе составляют первичный ключ, я хотел бы иметь возможность выводить все пары идентификаторов, чтобы они не работали вместе ни в одном проекте (сотрудник может работать над несколькими проектами) .

Я считаю, что это можно сделать с помощью какого-то соединения таблицы с самим собой, но я изо всех сил пытаюсь решить, как выводить результаты только в том случае, когда ProjectNum1 <> ProjectNum2, поскольку ясно, что это может иметь место для одного проекта, но не для другого. .

1 Ответ

0 голосов
/ 24 апреля 2018

Вы просматриваете все пары и фильтруете тех, кто работает вместе в одном проекте.

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, поэтому вы не получите инвертированные пары

...