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?
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
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
Per la sottomissione dei dati di grandi dimensioni è il modo giusto di fare. In questo caso Distinct sarà solo un hack. –