2013-01-21 4 views
1

Je voudrais obtenir une liste des groupes et de leurs membres montre (une seule fois) étant donné qu'un nom de membre:MYSQL - Comment construire cette requête?

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 | 

Voici le SQLFidlle
Ceci est le résultat:

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

Ce que je voudrais faire est

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

Comment dois-je changer la requête?

Répondre

3

juste ajouter 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

Ajoutez juste DISTINCT à votre GROUP_CONCAT. Voir la MySQL docs

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

Essayez cette requête

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

J'ai besoin de ce résultat: Shilla, Scully, Scully, Scully d'être: être Shilla, Scully – Ted

+0

donc je l'ai édité et son travail comme vous avez besoin –