Mam kwerendę, która łączy ciągi, jeśli należą one do jednej grupy.Jak uniknąć duplikowania w 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
Ale
GROUP_CONCAT (g.value, '')
daje to rezultatu.
czuły związek, związek uczuciowy, kochający związek, związek uczuciowy, kochający związek, kochający związek, kochający związek, kochający związek
Jak widać istnieją powielania w konkatenacji. Jak uniknąć duplikacji w konkatenacjach?
To działa, ale nie można określić przy użyciu separatora 'GROUP_CONCAT (DISTINCT' w SQLite, jeśli chciałbyś zmienić separator z domyślnego ',' musiałbyś albo użyć podejścia podkwerendy, jak pokazano w odpowiedzi CL, albo użyć zamiany (mogę sobie wyobrazić, że podejście podkwerendy jest o wiele lepsze.) – GarethD
Musiałem zaciąć to do już nieprzyjemnego zapytania, więc poszedłem z '' 'zamień (GROUP_CONCAT (DISTINCT g.value), ',', the_delimiter)' 'To jest okropne, ale chciałem pokazać szybki sposób na poradzenie sobie z tym, jeśli utkniesz z innym ogranicznikiem i bardzo dużym zapytaniem, które utrudni podzapytanie. Musisz mieć pewność, że twoje wartości nie zawierają przecinków, aby to działało. – Kelly
Dla zapytania o duże dane jest właściwym sposobem. W tym przypadku Distinct będzie tylko hackerem. –