Du kan använda GROUP_CONCAT
:
SELECT person_id,
GROUP_CONCAT(hobbies SEPARATOR ', ')
FROM peoples_hobbies
GROUP BY person_id;
Som Ludwig sa i hans kommentar,
du kan lägga till DISTINCT
operatör för att undvika dubbletter:
SELECT person_id,
GROUP_CONCAT(DISTINCT hobbies SEPARATOR ', ')
FROM peoples_hobbies
GROUP BY person_id;
Som Jan sa i deras kommentar,
du kan också sortera värdena innan du imploderar dem med ORDER BY
:
SELECT person_id,
GROUP_CONCAT(hobbies ORDER BY hobbies ASC SEPARATOR ', ')
FROM peoples_hobbies
GROUP BY person_id;
Som Dag sa i hans kommentar, det finns en gräns på 1024 byte på resultatet. För att lösa detta, kör den här frågan före din fråga:
SET group_concat_max_len = 2048;
Naturligtvis kan du ändra 2048
efter dina behov. För att beräkna och tilldela värdet:
SET group_concat_max_len = CAST(
(SELECT SUM(LENGTH(hobbies)) + COUNT(*) * LENGTH(', ')
FROM peoples_hobbies
GROUP BY person_id) AS UNSIGNED);