使用表EMP,其中MANAGER代表员工的经理:
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
是否可以在没有子查询的情况下执行此操作?
答案 0 :(得分: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
来获取所有员工,而不仅仅是那些经理。
答案 1 :(得分:0)
要获取经理主键列表,只需
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;
我最初省略了经理的身份证,但我编辑了它以便在组织有两个同名经理的情况下添加它:约翰史密斯说。
如果您需要状态消息,可以使用CASE呼叫。
SELECT
MANAGER,
CASE COUNT(*)
WHEN 0 THEN "IS NOT MANAGER"
ELSE "IS MANAGER"
END "STATUS"
FROM
EMP
GROUP BY
MANAGER;
答案 2 :(得分:0)
简短的回答是否定的。鉴于您显示的结构,没有办法显示没有连接/子查询/ CTE,您可以知道该人是否是链的顶部:
SELECT *
FROM EMP
WHERE MANAGER IS NULL
但除此之外,你需要一个连接/子查询/ CTE。