MySQL:使用Case语句

时间:2015-03-01 22:31:54

标签: mysql sql

我有三张名为“员工”,“经理人”,“主管”的表格

Employees
ID    Name
 1     Bob
 2     Alex
 3     Joe
 4     Melissa
 5     Hannah

Managers
MID   Name  
1     Bob
3     Joe

Supervisor
 SID   Name
 3     Joe
 4     Melissa

我正在尝试检查员工是管理员还是主管,或两者兼而有,并且有一个看起来像

的结果表
ID   Manager   Supervisor
1    Manager   NULL
2    NULL      NULL
3    Manager   Supervisor
4    NULL      SUPERVISOR
5    NULL      NULL

我想尝试使用案例陈述,以确定其他员工ID是经理和/或主管。但我不知道该怎么做。

我知道我必须做一些像

这样的事情
SELECT e.id /*how do i select the last 2 columns bc they are new?*/
FROM Employees e, Managers m, Supervisor s
CASE WHEN e.id = m.mid THEN 'manager' /*i don't think this is the correct format*/
CASE WHEN e.id = s.sid THEN 'supervisor'
....

2 个答案:

答案 0 :(得分:2)

您想使用left join。遵循一个简单的规则:不要在from子句中使用逗号。始终使用显式join语法。忽略任何告诉你的人或任何事情。这样的建议已经过时了。

select e.id,
       (case when m.mid is not null then 'Manager' end) as Manager,
       (case when s.sid is not null then 'Supervisor' end) as Supervisor
from employees e left join
     managers m
     on e.id = m.mid left join
     supervisors s
     on e.id = s.sid;

另请注意,您的表格未正确规范化。由于经理和主管是员工,因此您应该只在name表中包含employees列。它不应该在其他表中重复,除非同一个人在担任不同角色时可能有不同的名称。

答案 1 :(得分:1)

试试这个:

SELECT ID , (
 SELECT MID AS Manager
 FROM Managers WHERE MID = ID 
 LIMIT 1
) AS Manager, (
 SELECT SID AS Supervisor
 FROM Supervisors WHERE SID = ID
 LIMIT 1
) AS Supervisors
FROM Employees

这将显示您的结果如下

ID   Manager   Supervisor
1    1         NULL
2    NULL      NULL
3    3         3
4    NULL      4
5    NULL      NULL