Большая проблема в том, что подзапрос NOT EXISTS
ссылается на строки из объединенной таблицы. Столбец manager_id
содержит значение D.
, и это ссылка на объединенную таблицу, а не на таблицу в предложении FROM подзапроса.
E.manager_id = D.manager_id
^^^^^^^ ^
Мы также подозреваем, что руководитель работника заносится в строку сотрудника как ссылка на другую строку в таблице работника. Но у нас нет определения схемы или каких-либо примеров данных, поэтому мы просто догадываемся.
Кажется, в таблице employee
будет supervisor_id
...
SELECT e.first_name
, e.last_name
, e.department_id
, d.department_id
FROM employees e
WHERE NOT EXISTS
( SELECT 1
FROM employees s
WHERE s.id = e.supervisor_id
)
ORDER
BY e.last_name
, e.first_name
Также возможно, что некоторые строки в employee
имеют значение в столбце department_id
, у которого нет соответствующей строки в таблице department
. Если в department
совпадающей строки нет, внутреннее объединение предотвратит возвращение строки из employee
.
Мы можем использовать внешнее соединение, когда хотим вернуть строки, даже если в объединенной таблице не найдено ни одной подходящей строки. Если мы хотим задействовать таблицу departments
, поскольку под «супервизором» понимается работник, являющийся руководителем отдела, мы можем использовать шаблон против объединения ...
SELECT e.first_name
, e.last_name
FROM employees e
LEFT
JOIN departments d
ON d.manager_id = e.employee_id
WHERE d.manager_id IS NULL
ORDER
BY e.last_name
, e.first_name
Опять же, без схемы и некоторых примеров данных, мы просто догадываемся.