Maison >base de données >tutoriel mysql >Comment utiliser correctement GROUP_CONCAT avec LEFT JOIN dans MySQL pour concaténer des solutions par ticket ?
MySQL GROUP_CONCAT avec LEFT JOIN Problème et solution
Dans MySQL, la fonction GROUP_CONCAT est couramment utilisée pour concaténer des chaînes de plusieurs lignes dans un groupe . Cependant, lors de l'utilisation de cette fonction avec LEFT JOIN, il est possible de rencontrer une situation dans laquelle plusieurs lignes sont combinées en une seule ligne au lieu d'être séparées.
Énoncé du problème
Considérons le scénario suivant :
La requête utilisée :
<code class="SQL">SELECT Tickets.*, GROUP_CONCAT(Solutions.solution) AS CombinedSolutions FROM Tickets LEFT JOIN Solutions ON Tickets.id = Solutions.ticket_id ORDER BY Tickets.id;</code>
Problème
Ce La requête renvoie une seule ligne, avec les informations du ticket 1 et les entrées de solution du ticket 1 et du ticket 2 concaténées ensemble.
Solution
Pour résoudre ce problème, utilisez une sous-requête ou table dérivée dans l'instruction JOIN pour regrouper les solutions par ID de ticket :
Solution 1 : Utilisation de la sous-requête
<code class="SQL">SELECT t.*, x.combinedsolutions FROM TICKETS t LEFT JOIN (SELECT s.ticket_id, GROUP_CONCAT(s.solution) AS combinedsolutions FROM SOLUTIONS s GROUP BY s.ticket_id) x ON x.ticket_id = t.ticket_id</code>
Solution 2 : Utilisation de la table dérivée
<code class="SQL">SELECT t.*, (SELECT GROUP_CONCAT(s.solution) FROM SOLUTIONS s WHERE s.ticket_id = t.ticket_id) AS combinedsolutions FROM TICKETS t</code>
En regroupant les solutions avant de les rejoindre, la requête renvoie désormais des lignes distinctes pour chaque ticket, avec leurs solutions correspondantes concaténées en une seule chaîne.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!