Maison > base de données > tutoriel mysql > le corps du texte

Comment utiliser correctement GROUP_CONCAT avec LEFT JOIN dans MySQL pour concaténer des solutions par ticket ?

Barbara Streisand
Libérer: 2024-10-27 10:35:03
original
541 Les gens l'ont consulté

How to Correctly Use GROUP_CONCAT with LEFT JOIN in MySQL to Concatenate Solutions per 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 :

  • Deux tableaux, « Tickets » et « Solutions », représentant une base de données d'assistance
  • Chaque ticket a une ou plusieurs solutions correspondantes
  • Objectif : Créer une requête qui combine toutes les solutions pour chaque ticket

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>
Copier après la connexion

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>
Copier après la connexion

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>
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!