Как определить, является ли сотрудник менеджером?
Используя таблицу EMP, где менеджер представляет менеджера сотрудника:
EMPLOYEE MANAGER
1 NULL
2 1
3 1
4 2
5 2
Как я могу сделать запрос, который определяет, является ли сотрудник менеджером?
EMPLOYEE STATUS
1 IS MANAGER
2 IS MANAGER
3 IS NOT MANAGER
4 IS NOT MANAGER
5 IS NOT MANAGER
Можно ли это сделать без подзапроса?
3 ответа:
Вы можете
JOIN
таблицу на себя и использоватьCASE
оператор:SELECT DISTINCT E.Employee, CASE WHEN M.Employee IS NOT NULL THEN 'IS MANAGER' ELSE 'IS NOT MANAGER' END Status FROM YourTable E LEFT JOIN YourTable M ON E.Employee = M.Manager
Используйте
OUTER JOIN
, чтобы получить всех сотрудников, а не только тех, которые являются менеджерами.
Короткий ответ-нет. Учитывая структуру, которую вы показываете, нет никакого способа показать, что без соединения / подзапроса / CTE вы могли бы знать, является ли человек вершиной цепочки с:
SELECT * FROM EMP WHERE MANAGER IS NULL
Но помимо этого вам нужен join/subquery/CTE.
Чтобы получить список первичных ключей менеджера, просто
SELECT DISTINCT MANAGER FROM EMP;
Чтобы получить дополнительную информацию о каждом менеджере, предположим, что в таблице также есть такие вещи, как имя менеджера:
Я изначально опустил идентификатор менеджера, но я отредактировал его, чтобы добавить его на тот случай, если в организации есть два менеджера с одинаковым именем: скажем, Джон Смит.SELECT DISTINCT m.employee, m.given_name, m.surname FROM EMP m JOIN EMP e ON e.manager = m.employee;
Если вы хотите получить сообщение о состоянии, вы можете использовать вызов обращения.
SELECT MANAGER, CASE COUNT(*) WHEN 0 THEN "IS NOT MANAGER" ELSE "IS MANAGER" END "STATUS" FROM EMP GROUP BY MANAGER;