SQL加入仅使用一个表的两个不同查询

时间:2015-11-26 19:20:36

标签: mysql sql join group-by

基本上,我有一个包含员工信息的表:

frs_Employee

enter image description here

我的最终结果应该是一个查询,它返回经理的姓名(没有'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(这是我怀疑这个问题已经解决了),但我无法理解它。我还想过使用一个临时表,但我不确定到底要做到这一点。

有关良好,通用解决方案的任何想法吗?

1 个答案:

答案 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()不需要子查询。