sql >> Base de Datos >  >> RDS >> Mysql

¿Puedo concatenar varias filas de MySQL en un campo?

Puede usar GROUP_CONCAT :

SELECT person_id,
   GROUP_CONCAT(hobbies SEPARATOR ', ')
FROM peoples_hobbies
GROUP BY person_id;

Como declaró Ludwig en his comentario, puedes agregar el DISTINCT operador para evitar duplicados:

SELECT person_id,
   GROUP_CONCAT(DISTINCT hobbies SEPARATOR ', ')
FROM peoples_hobbies
GROUP BY person_id;

Como dijo Jan en su comentario, también puede ordenar los valores antes de implosionarlos usando ORDER BY :

SELECT person_id, 
       GROUP_CONCAT(hobbies ORDER BY hobbies ASC SEPARATOR ', ')
FROM peoples_hobbies
GROUP BY person_id;

Como dijo Dag en su comentario, hay un límite de 1024 bytes en el resultado. Para resolver esto, ejecute esta consulta antes de su consulta:

SET group_concat_max_len = 2048;

Por supuesto, puede cambiar 2048 de acuerdo a sus necesidades. Para calcular y asignar el valor:

SET group_concat_max_len = CAST(
                     (SELECT SUM(LENGTH(hobbies)) + COUNT(*) * LENGTH(', ')
                           FROM peoples_hobbies
                           GROUP BY person_id) AS UNSIGNED);