Можете да използвате GROUP_CONCATкод>
:
SELECT person_id,
GROUP_CONCAT(hobbies SEPARATOR ', ')
FROM peoples_hobbies
GROUP BY person_id;
Както Лудвиг заяви в hi коментар,
можете да добавите DISTINCT
оператор за избягване на дублиране:
SELECT person_id,
GROUP_CONCAT(DISTINCT hobbies SEPARATOR ', ')
FROM peoples_hobbies
GROUP BY person_id;
Както Ян заяви в тяхното коментар,
можете също да сортирате стойностите, преди да ги имплодирате, като използвате ORDER BY
:
SELECT person_id,
GROUP_CONCAT(hobbies ORDER BY hobbies ASC SEPARATOR ', ')
FROM peoples_hobbies
GROUP BY person_id;
Както Даг заяви в негов коментар, има ограничение от 1024 байта за резултата. За да разрешите това, изпълнете тази заявка преди заявката си:
SET group_concat_max_len = 2048;
Разбира се, можете да промените 2048
според вашите нужди. За да изчислите и присвоите стойността:
SET group_concat_max_len = CAST(
(SELECT SUM(LENGTH(hobbies)) + COUNT(*) * LENGTH(', ')
FROM peoples_hobbies
GROUP BY person_id) AS UNSIGNED);