2013-01-21 47 views
1

我想獲得組的列表,並顯示他們的成員(僅一次)只給會員名:MYSQL - 如何建立這個查詢?

TABLE_A:

| GROUP_ID | NAME | 
--------------------- 
|  1 | Tom | 
|  2 | Frank | 
|  3 | Shilla | 
|  1 | Scully | 
|  3 | Scully | 
|  3 | Scully | 
|  3 | Scully | 
|  4 | Scully | 
|  1 | Jen | 

表-B:

| ID | GROUP_NAME | 
------------------- 
| 1 | Troopers | 
| 2 |  Clubs | 
| 3 | Mavericks | 
| 4 | Tomatoes | 

這是SQLFidlle
這就是結果:

| GROUP_NAME |  GROUP_CONCAT(C.NAME) | 
-------------------------------------------- 
| Mavericks | Scully,Scully,Scully,Shilla | 
| Tomatoes |      Scully | 
| Troopers |    Scully,Jen,Tom | 

我想獲得是

| GROUP_NAME | GROUP_CONCAT(C.NAME) | 
------------------------------------- 
| Mavericks | Scully,Shilla  | 
| Tomatoes | Scully    | 
| Troopers | Scully,Jen,Tom  | 

我應該如何更改查詢?

回答

3

只需添加DISTINCT

SELECT b.GROUP_NAME, GROUP_CONCAT(DISTINCT c.Name) 
FROM  
     (
      SELECT GROUP_ID 
      FROM table_a 
      WHERE name = 'Scully' 
      GROUP BY table_a.GROUP_ID 
     ) a 
     INNER JOIN table_b b 
      ON a.GROUP_ID = b.ID 
     INNER JOIN table_a c 
      ON a.GROUP_ID = c.GROUP_ID 
GROUP BY b.GROUP_NAME; 
2

只需添加DISTINCT您GROUP_CONCAT。見MySQL docs

... GROUP_CONCAT(DISTINCT C.NAME) ... 
0

嘗試此查詢

SELECT 
    * 
FROM table_b as b 
LEFT JOIN (
    SELECT 
      GROUP_CONCAT(DISTINCT NAME) as Names, 
      GROUP_ID 
    FROM Table_a 
    GROUP BY GROUP_ID 
) as a ON a.GROUP_ID = b.ID 

SQL FIddle

+0

我需要這樣的結果:新羅,斯卡利,斯卡利,斯卡利是:以新羅,斯庫利 – Ted

+0

所以我有編輯和它的工作是你需要的 –