Anda dapat menggunakan GROUP_CONCAT
:
SELECT person_id,
GROUP_CONCAT(hobbies SEPARATOR ', ')
FROM peoples_hobbies
GROUP BY person_id;
Seperti yang dinyatakan Ludwig dalam miliknya komentar,
Anda dapat menambahkan DISTINCT
operator untuk menghindari duplikat:
SELECT person_id,
GROUP_CONCAT(DISTINCT hobbies SEPARATOR ', ')
FROM peoples_hobbies
GROUP BY person_id;
Seperti yang dinyatakan Jan dalam mereka komentar,
Anda juga dapat mengurutkan nilai sebelum meledakkannya menggunakan ORDER BY
:
SELECT person_id,
GROUP_CONCAT(hobbies ORDER BY hobbies ASC SEPARATOR ', ')
FROM peoples_hobbies
GROUP BY person_id;
Seperti yang dinyatakan Dag dalam komentarnya, ada batas 1024 byte pada hasilnya. Untuk mengatasinya, jalankan kueri ini sebelum kueri Anda:
SET group_concat_max_len = 2048;
Tentu saja, Anda dapat mengubah 2048
sesuai dengan kebutuhan Anda. Untuk menghitung dan menetapkan nilai:
SET group_concat_max_len = CAST(
(SELECT SUM(LENGTH(hobbies)) + COUNT(*) * LENGTH(', ')
FROM peoples_hobbies
GROUP BY person_id) AS UNSIGNED);