MySQL加入错误的结果

时间:2015-06-01 23:20:31

标签: mysql join

我有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

谢谢

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