Рекурсивные отношения - перечислите людей с супервизором и без супервизора - PullRequest
4 голосов
/ 01 декабря 2011

У меня есть официальная таблица с идентификатором и именем ....

У официальных лиц могут быть супервизоры - они хранятся в объединительной таблице с именем officialsupervisor, где official_id и supervisor_id являются внешними ключами официальной таблицы.

Я могу показать чиновникам с их руководителем с

SELECT o.official_name Official, p.official_name Supervisor 
FROM officialsupervisor s, official o, official p 
WHERE o.official_id = s.official_id AND p.official_id = s.supervisor_official_id

Я могу перечислить чиновников, у которых нет руководителя с

 SELECT o.official_name Official
 FROM  official o
 WHERE o.official_id NOT IN (SELECT official_id
 FROM officialsupervisor)

Но я не могуВыясните, как составить список всех должностных лиц с их руководителем или бланк, если у них его нет.Я чувствую, как будто это должно быть довольно просто!

Спасибо за любую помощь.

Ответы [ 2 ]

4 голосов
/ 01 декабря 2011

Попробуйте один раз:

SELECT o.official_name Official, p.official_name Supervisor
FROM official o
LEFT JOIN officialsupervisor s ON o.official_id = s.official_id
LEFT JOIN official p ON p.official_id = s.supervisor_official_id
3 голосов
/ 01 декабря 2011

Вам не нужен рекурсивный запрос, все, что вам нужно, это объединить две таблицы с OUTER JOINS:

SELECT o.official_name Official, p.officialname  
FROM officialsupervisor s
Left Outer Join official o on o.official_id = s.official_id 
Left Outer JOIN official p ON p.official_id = s.supervisor_official_id
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...