15

1 人が多くの部門に所属できるため、People と Departments の間には多対多の関係があります。

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

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

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

以下の SQL を使用してテーブルで単純な LEFT JOIN を実行すると、1 人の人物に関連する複数の行が取得されます。

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

さまざまな組み合わせをGROUP_CONCAT試しましたが、うまくいきませんでした。

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

4

2 に答える 2

19
    SELECT people.pName,
           GROUP_CONCAT(departments.deptName SEPARATOR ', ') deptName
      FROM people
 LEFT JOIN people_departments 
        ON people.pID = people_departments.pID
 LEFT 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)
于 2011-07-24T21:40:27.193 に答える