3

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

没有子查询可以做到这一点吗?

4

3 回答 3

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

使用 anOUTER JOIN来获取所有员工,而不仅仅是管理人员。

于 2013-06-02T02:21:32.533 回答
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;

我最初忽略了经理的 ID,但我编辑了它以添加它,以防组织有两个同名的经理:比如 John Smith。

如果需要状态消息,可以使用 CASE 调用。

SELECT
    MANAGER,
    CASE COUNT(*)
        WHEN 0 THEN "IS NOT MANAGER"
        ELSE "IS MANAGER"
    END "STATUS"
FROM
    EMP
GROUP BY
    MANAGER;
于 2013-06-02T02:22:28.997 回答
0

简短的回答是否定的。鉴于您显示的结构,没有办法显示没有连接/子查询/CTE,您可以知道该人是否是链的顶部:

SELECT *
FROM EMP 
WHERE MANAGER IS NULL

但除此之外,您还需要一个联接/子查询/CTE。

于 2013-06-02T02:23:00.727 回答