SQL - транзитивные отношения - PullRequest
0 голосов
/ 19 ноября 2018

Допустим, у меня есть две таблицы 'Rel' и 'Workers'. Я хочу перечислить имена как пары тех людей, которые находятся в переходных отношениях.

Итак, в моем примере 100 -> 105 и 105 -> 911 означает, что люди с идентификаторами 100 и 911 в таких отношениях. Поэтому я хочу, чтобы их имена были указаны в моей таблице результатов.

Я пытался использовать соединения и 'connect by', чтобы решить эту проблему, но продолжал терпеть неудачу. Надеюсь, вы, ребята, можете помочь.

enter image description here

1 Ответ

0 голосов
/ 20 ноября 2018

SQL Fiddle

Настройка схемы Oracle 11g R2 :

CREATE TABLE Rel ( Employee, Boss ) AS
SELECT 100, 105 FROM DUAL UNION ALL
SELECT 177, 180 FROM DUAL UNION ALL
SELECT 105, 911 FROM DUAL UNION ALL
SELECT 400, 402 FROM DUAL;

CREATE TABLE Workers ( id, name ) AS
SELECT 100, 'A' FROM DUAL UNION ALL
SELECT 105, 'B' FROM DUAL UNION ALL
SELECT 177, 'C' FROM DUAL UNION ALL
SELECT 180, 'D' FROM DUAL UNION ALL
SELECT 400, 'E' FROM DUAL UNION ALL
SELECT 402, 'F' FROM DUAL UNION ALL
SELECT 911, 'G' FROM DUAL;

Запрос 1 :

SELECT e.name as employee,
       w.name as related_to
FROM   (
  SELECT CONNECT_BY_ROOT( Employee ) AS employee,
         boss AS related_to
  FROM   Rel
  CONNECT BY PRIOR Boss = Employee
) r
INNER JOIN Workers e
ON e.id = r.employee
INNER JOIN Workers w
ON w.id = r.related_to

Результаты

| EMPLOYEE | RELATED_TO |
|----------|------------|
|        A |          B |
|        C |          D |
|        E |          F |
|        B |          G |
|        A |          G |
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...