2013-08-17 15 views
15

Ho una query che concatena le stringhe se appartengono a un gruppo.Come evitare la duplicazione in GROUP_CONCAT?

SELECT e.id, 
     ke.value, 
     re.value AS re_value, 
     GROUP_CONCAT(g.value,', ') 
     FROM entry e 
       INNER JOIN k_ele ke ON e.id = ke.fk 
       INNER JOIN r_ele re ON e.id = re.fk 
       INNER JOIN sense s ON e.id = s.fk 
       INNER JOIN gloss g ON s.id = g.fk 
WHERE g.lang IS NULL 
GROUP BY s.id 
ORDER BY re_value 

Ma

group_concat (g.value, '')

sta dando questo risultato.

affettuoso rapporto, relazione affettiva, relazione affettiva, il rapporto affettuoso, amorevole rapporto, relazione d'amore, relazione d'amore, d'amore rapporto

Come potete vedere ci sono duplicazioni di concatenazione. Come evitare duplicazioni nelle concatenazioni?

risposta

23
GROUP_CONCAT(DISTINCT g.value) 
+5

Questo funziona, ma non è possibile specificare un delimitatore quando si utilizza 'group_concat (DISTINCT' in SQLite, se si volesse cambiare il delimitatore di default ',' si dovrebbe usare l'approccio di subquery come mostrato nella risposta di CL, o usare una sostituzione (immagino che l'approccio della sottoquery sia molto meglio) – GarethD

+4

Ho dovuto bloccare questo in una query già brutta, quindi sono andato con '' 'replace (GROUP_CONCAT (DISTINCT g.value), ',', the_delimiter)' ''. È terribile, ma volevo mostrare un modo rapido per affrontare questo problema se sei bloccato con l'altro delimitatore e una query molto ampia che renderebbe difficile la subquery. Devi essere sicuro che i tuoi valori non contengono virgole perché funzioni. – Kelly

+0

Per la sottomissione dei dati di grandi dimensioni è il modo giusto di fare. In questo caso Distinct sarà solo un hack. –

2

è necessario rimuovere i duplicati prima di applicare il group_concat, che in genere richiede una sottoquery:

SELECT a, GROUP_CONCAT(b) 
FROM (SELECT DISTINCT a, b 
     FROM MyTable) 
GROUP BY a 
Problemi correlati