2012-11-26 61 views
1

我有3個表如下:基於共同關係的MySQL選擇從多個表

Table: sys_department 
Columns: dept_id dept_name 
row:  1   Support 
row:  2   HR 
row:  3   Billing 

Table: sys_groups 
Columns: group_id group_name 
row:  1   Manager 
row:  2   Intern 
row:  3   Staff 

Table: group_dept_access 
Columns: group_id dept_id 
row:  1   3 
row:  2   1 
row:  2   2 
row:  3   1 
row:  3   2 

我想運行一個查詢與他們有機會獲得該部門的名稱,以獲取羣組名稱的列表。

因此,由於group_dept_access中的3的group_id將1和2都列爲dept_id,因此該組將使用它的group_name of Billing連同部門名稱Support和HR一起返回。

我能夠運行該查詢選擇使用JOIN group_dept_access時取組名,但我不知道如何查詢所有三個表,並得到各部門也是如此。

不幸的是我無法改變的表結構,如果說第三個表沒有爲每個組的多個條目這將是很好的,但它是現有的系統,所以如果改變將打破。在當前服務器上也使用MySQL 5.1.x,但將來會使用5.5.x.如果這樣的查詢在不同版本之間完成的話,每個版本都將如何完成?

理解,因爲任何幫助,這將幫助我做,我將要執行其他類似查詢。關於它如何完成的解釋會非常好,以便我可以學習如何完成這3個表查詢。先謝謝你。

+1

檢查我的更新答案 –

+0

我也謝謝你。 –

回答

2

試試這個:

SELECT sg.group_name, A.dept_name 
FROM sys_groups sg 
INNER JOIN (SELECT gda.group_id, GROUP_CONCAT(sd.dept_name SEPARATOR '|') dept_name 
      FROM group_dept_access gda 
      INNER JOIN sys_department sd ON gda.dept_id = sd.dept_id 
      GROUP BY gda.group_id) AS A ON sg.group_id = A.group_id 
+2

很棒!謝謝。當DEPT_NAME被連接到一起是使用逗號完成,一個快速的問題是,它可以指定使用和使用字符「|」代替?爲防萬一,部門名稱或組中包含一個逗號。 –

0
SELECT g.group_id, g.group_name, d.dept_id, d.dept_name 
FROM sys_department d, 
sys_groups g, 
group_dept_access gd 
WHERE d.dept_id = gd.dept_id 
AND g.group_id=gd.group_id 
+0

這將不會返回組或部門的任何名稱。 –