我有3个表,名称,主管和经理。我需要一个显示名称列表的查询,以及他们是主管,经理还是两者。
我当前的查询完成了90%的问题,返回所有主管,并检查他们是否也是经理。但是,如果用户不是“主管”,而是“经理”而不是他未在查询中列出。
SELECT name.id,
name.email,
IF(sup.code = 1, 'Yes', 'No') as Supervisor,
IF(man.userId IS NOT NULL, 'Yes', 'No') as Manager
FROM employee name
LEFT JOIN supervisor sup ON name.id = sup.id
LEFT JOIN manager man ON name.id = man.id
WHERE sup.code = 1
谢谢
答案 0 :(得分:2)
您的问题是where
子句。通过包含它,您将结果限制为仅包括具有该值集的结果。显然,对于那些不是主管的人来说,这不是真的。
这会破坏您加入的outernish
。要在左连接上具有其他条件而不破坏该功能,您需要将条件移至on
子句。在这种情况下,看起来您也可以完全删除where
子句,除非每个员工的主管表中可能有多个条目。
无论如何,你的两个选择是:
SELECT name.id,
name.email,
IF(sup.code = 1, 'Yes', 'No') as Supervisor,
IF(man.userId IS NOT NULL, 'Yes', 'No') as Manager
FROM employee name
LEFT JOIN supervisor sup ON name.id = sup.id
LEFT JOIN manager man ON name.id = man.id
和
SELECT name.id,
name.email,
IF(sup.code = 1, 'Yes', 'No') as Supervisor,
IF(man.userId IS NOT NULL, 'Yes', 'No') as Manager
FROM employee name
LEFT JOIN supervisor sup ON name.id = sup.id AND sup.code = 1
LEFT JOIN manager man ON name.id = man.id