SQL САМОЕ и ВНУТРЕННИЕ СОЕДИНЕНИЯ в одном запросе - PullRequest
0 голосов
/ 11 июля 2020

У меня есть база данных SQL с тремя таблицами: отдел, роль и сотрудник. Таблица сотрудников имеет внешние ключи для ссылки на первичные ключи как в таблицах отделов, так и в таблицах ролей, а также на первичные ключи других сотрудников в своей собственной таблице. В настоящее время у меня есть два отдельных запроса для доступа к необходимой мне информации: один с использованием двух ВНУТРЕННИХ СОЕДИНЕНИЙ для доступа к таблицам отделов и ролей, а другой - с использованием САМОСОЕДИНЕНИЯ.

SELECT employee.id
     , employee.first_name
     , employee.last_name
     , role.title
     , role.salary
     , department.name AS Department 
  FROM employee 
  JOIN role 
    ON employee.role_id = role.id 
  JOIN department 
    ON role.department_id = department.id;

SELECT A.id
     , A.first_name
     , A.last_name
     , CONCAT(B.first_name, ' ', B.last_name) As Manager 
  FROM employee A
     , employee B 
 WHERE A.manager_id = B.id 
 ORDER 
    BY A.id;

Я хотел бы, чтобы результат включал столбцы: employee.id, employee.first_name, employee.last_name, role.title, role.salary, Department.name AS Department и CONCAT (B.first_name, '', B.last_name) AS Manager.

Есть ли способ объединить эти два запроса в один запрос? Спасибо!

Ответы [ 2 ]

0 голосов
/ 11 июля 2020

Это так же просто, как дополнительное соединение

Легче всего отслеживать с более подробными именами.

SELECT employee.id,
       employee.first_name,
       employee.last_name,
       role.title,
       role.salary,
       department.name AS Department,
       CONCAT(manager.first_name, ' ', manager.last_name) AS Manager
FROM employee
         JOIN role
              ON employee.role_id = role.id
         JOIN department
              ON role.department_id = department.id
         JOIN employee as manager
              ON employee.manager_id = manager.id;
0 голосов
/ 11 июля 2020

Без образцов данных и схемы таблиц это немного сложно воспроизвести, но ... при первом взгляде я сделаю снимок в темноте следующим образом:

SELECT A.id, A.first_name, A.last_name, role.title, 
       role.salary, department.name AS Department, 
       CONCAT(B.first_name, ' ', B.last_name) As Manager  
FROM employee A
JOIN employee B ON A.manager_id = B.id
JOIN role ON A.role_id = role.id 
JOIN department ON role.department_id = department.id
ORDER BY A.id;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...