2015-11-26 62 views
0

基本上,我有一個包含員工信息表:SQL加盟只使用一個表中的兩個不同的查詢

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(這是我如何懷疑這個問題已經解決了),但是我無法在腦海中圍繞它。我也想過使用臨時表,但我不確定要完成這個工作。

對於一個好的通用解決方案的任何想法?

+0

這種關係只有父母 - >孩子,或者可以有祖父母 - >父母 - >孩子等等? –

+0

@JorgeCampos描述看起來像只有那些與空是經理 –

+0

是的,我明白了。我問,因爲新人不考慮關係的深度是一個常見的錯誤。這只是確定的。在一個級別內,一個普通的左連接解決了這個問題,但是如果它更像一個像'John管理彼得管理Phill'一樣的mysql,它並不是那麼微不足道。 –

回答

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()

+0

不幸的是,這並不能給我我需要的答案。它只是返回經理和他們的ID。 – Skoinks