sql >> Databasteknik >  >> RDS >> Mysql

Kan jag sammanfoga flera MySQL-rader i ett fält?

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);


  1. Saknade index i MS SQL eller optimering på nolltid

  2. Hur man söker efter exakt matchade ord med MySql Query

  3. Neo4j installation

  4. Bästa praxis flerspråkig webbplats