如何确定员工是否是经理?

时间:2013-06-02 02:17:02

标签: sql oracle join

使用表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

是否可以在没有子查询的情况下执行此操作?

3 个答案:

答案 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。