Соедините EMPLOYEE с самой собой: одна копия — сотрудник, другая — его руководитель. Затем сравните зарплаты по связи CHIEF_ID = ID.
Выборка сотрудников, получающих больше, чем их руководители
Соедините EMPLOYEE с самой собой: одна копия — сотрудник, другая — его руководитель. Затем сравните зарплаты по связи CHIEF_ID = ID.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
Получить перечень работников, у которых размер заработной платы превышает зарплату их непосредственного начальника.
CREATE TABLE EMPLOYEE (
ID NUMBER,
NAME VARCHAR(256),
SALARY NUMBER,
DEPARTMENT_ID NUMBER,
CHIEF_ID NUMBER
);
Ответ
Соедините EMPLOYEE с самой собой: одна копия — сотрудник, другая — его руководитель. Затем сравните зарплаты по связи CHIEF_ID = ID.
SELECT e.ID, e.NAME, e.SALARY, e.CHIEF_ID
FROM EMPLOYEE e
JOIN EMPLOYEE chief ON chief.ID = e.CHIEF_ID
WHERE e.SALARY > chief.SALARY;
Предполагается уникальность ID, которую стоит закрепить ограничением. Работники без найденного руководителя не попадут в результат. При NULL в зарплате сравнение не истинно, поэтому такие строки также исключены. Совпадение DEPARTMENT_ID условием задачи не требуется.