基本上,我有一个包含员工信息的表:
frs_Employee
我的最终结果应该是一个查询,它返回经理的姓名(没有'mngnin'的人,即前12名员工),以及他们管理的员工的姓名。
我已经想出如何返回连锁员工名单:
SELECT (SELECT GROUP_CONCAT(empname) AS employees)
FROM frs_Employee
WHERE `mgrnin` <> ''
GROUP BY `mgrnin`
问题在于其中一位经理(NIN001)没有管理员工。因此,当我使用GROUP BY时,我的行数少于应有的数量。
我要么让GROUP BY以某种方式获得空字段 - 我尝试使用别名:
(SELECT `empnin` FROM frs_Employee WHERE `mgrnin` = '') AS `myAlias`
但这本身就令人头疼。
我也尝试过使用JOIN(这是我怀疑这个问题已经解决了),但我无法理解它。我还想过使用一个临时表,但我不确定到底要做到这一点。
有关良好,通用解决方案的任何想法吗?
答案 0 :(得分:0)
您可以使用left join
:
SELECT m.empnin, GROUP_CONCAT(e.empname) AS employees
FROM frs_Employee m LEFT JOIN
frs_Employee e
ON e.mgrnin = m.empnin
WHERE m.mgrnin IS NULL
GROUP BY m.empin;
另请注意,GROUP_CONCAT()
不需要子查询。