2013-01-21 3 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 | 

TABLE_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

так я редактировал и его работа по мере необходимости –

Смежные вопросы