我有三张名为“员工”,“经理人”,“主管”的表格
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'
....
答案 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