2012-11-09 17 views
5

Diciamo che ho query come questa:MySQL GROUP BY "e il filtro"

SELECT name, GROUP_CONCAT(number) 
FROM objects 
GROUP BY name 

E USCITE:

+----------+----------------------+ 
| NAME | GROUP_CONCAT(NUMBER) | 
+----------+----------------------+ 
| false_1 | 2,1     | 
| false_2 | 3,4     | 
| true_1 | 4,3,2,1    | 
| true_2 | 2,3     | 
+----------+----------------------+ 

Ora come posso restituire le righe che hanno 2 AND 3 come number?

Nota: Questa query è raggruppato - tabella ha 10 righe, in questo modo:

+---------+--------+ 
| NAME | NUMBER | 
+---------+--------+ 
| true_1 | 1  | 
| true_1 | 2  | 
| true_1 | 3  | 
| ...  | ... | 
+---------+--------+ 

[Link to SQLFiddle]

risposta

9
SELECT name, GROUP_CONCAT(number) 
FROM objects 
WHERE number IN (2,3) 
GROUP BY name 
HAVING COUNT(*) = 2 

o se si desidera conserva tutto il valore su w hich il nome ha,

SELECT a.name, GROUP_CONCAT(A.number) 
FROM objects a 
     INNER JOIN 
     (
      SELECT name 
      FROM objects 
      WHERE number IN (2,3) 
      GROUP BY name 
      HAVING COUNT(*) = 2 
     ) b ON a.Name = b.Name 
GROUP BY a.name 
+1

Primo uno funziona come un fascino! Grazie! – Kristian

+1

prego @ Kristian! : D –

+0

Perché la riga 'true_1 | 4,3,2,1 'non viene restituito nella sua forma. –