2011-07-24 20 views
11

私は人と部署の間に多人数の関係を持っています。なぜなら、1人が多くの部署に入ることができるからです。MySQLの多対多リレーションシップで、カンマ区切りリストで1つのフィールドのデータを連結する方法は?

People   Departments 
------   ----------- 
pID pName  deptID deptName 
1 James  1  Engineering 
2 Mary  2  Research 
3 Paul  3  Marketing 
       4  Communications 

People_Departments 
------------------ 
pID deptID 
1  1 
1  2 
2  2 
2  4 
3  1 
3  2 
3  3 

は、私が欲しいのはこれです:

SELECT people.pName, 
     departments.deptName 
FROM people 
LEFT JOIN people_departments ON people.pID=people_departments.pID 
LEFT JOIN departments ON people_departments.deptID=departments.deptID 
:私は平野LEFTは、以下のSQLを使用してテーブルにJOINを行う場合、私はいくつかの行が1人に関連してしまいます

pName deptName 
James Engineering, Research 
Mary Research, Communication 
Paul Engineering, Research, Marketing 

私はGROUP_CONCATの様々な組み合わせを試みましたが、運がありません。

共有するアイデアはありますか?

答えて

11
SELECT people.pName, 
      GROUP_CONCAT(departments.deptName SEPARATOR ', ') deptName 
     FROM people 
LEFT JOIN people_departments 
     ON people.pID = people_departments.pID 
INNER JOIN departments 
     ON people_departments.deptID = departments.deptID 
    GROUP BY people.pID 

出力:

+-------+----------------------------------+ 
| pName | deptName       | 
+-------+----------------------------------+ 
| James | Engineering, Research   | 
| Mary | Research, Communications   | 
| Paul | Engineering, Research, Marketing | 
+-------+----------------------------------+ 
3 rows in set (0.00 sec) 
+1

実は、私の組み合わせのどれも働いていない、これははとても重要です。実際のプロジェクトでは多対多の関連テーブルからデータを取得していましたが、私はあなたの助けによって必要なデータを取得することができました。再度、感謝します! – shailenTJ

0

私のソリューションは、次のとおりです。

SELECT people.pName, 
GROUP_CONCAT(tmp.deptName SEPARATOR ', ') deptName 
FROM people 
LEFT JOIN (SELECT people_departments.pID, departments.deptName FROM people_departments LEFT JOIN departments ON people_departments.deptID = departments.deptID) as tmp 
ON tmp.pID = people.pID 
GROUP BY people.pID 

結果:私はGROUP BYを省略しているため

+-------+----------------------------------+ 
| pName | deptName       | 
+-------+----------------------------------+ 
| James | Engineering, Research   | 
| Mary | Research, Communications   | 
| Paul | Engineering, Research, Marketing | 
+-------+----------------------------------+ 
関連する問題