2015-12-11 26 views
1

多列我要顯示在每個department.For這個我下面提到的查詢創建每個角色的員工人數。但它沒有給予(a)所有角色(b)在員工數爲零的相應部門中擔任角色的所有員工。MySQL的:爲組第

SELECT qodi.department_name,IFNULL(qobi.band_name, 'No Band') 'Band',count(qu1.user_id) emp_count 
FROM 
qee_org_dept_info qodi 
LEFT OUTER JOIN qee_user qu1 ON qodi.department_name =qu1.department AND qu1.org_id=1 
LEFT OUTER JOIN qee_org_band_info qobi ON qobi.band_name = qu1.band_name 
GROUP BY qodi.department_name,qobi.band_name 
ORDER BY qodi.department_name 

角色在qee_org_band_info中定義。用戶在qee_user和部門定義的qee_org_dept_info

結果上述查詢的是: - enter image description here

預期結果是: - 所有部門和所有角色應該來,即使在各部門的這個角色的員工數是零。

回答

1

所有部門和所有角色都應該出現,即使員工在各部門中的角色數爲零。

這意味着,您需要在部門和角色之間產生笛卡爾連接,並加入笛卡爾聯接的結果。

SELECT qodi.department_name,IFNULL(qobi.band_name, 'No Band') 'Band',count(qu1.user_id) emp_count 
FROM 
(qee_org_dept_info qodi INNER JOIN qee_org_band_info qobi) 
LEFT OUTER JOIN qee_user qu1 ON qodi.department_name =qu1.department AND qobi.band_name = qu1.band_name AND qu1.org_id=1 
GROUP BY qodi.department_name,qobi.band_name 
ORDER BY qodi.department_name 

請注意,我改變的加入順序,我用內部聯接,而不是留下樂隊的加盟部門。據MySQL文檔:

INNER JOIN和,(逗號)是在不存在的連接條件語義等同:既產生規定的表(即,在第一個表的每行之間的笛卡爾積連接到第二個表中的每一行)。

從技術上講,沒有必要在內部連接表達式中使用括號,但是,我覺得這種代碼更具可讀性。

+0

非常感謝。這工作完美 – VikramK

相關問題