Heim >Datenbank >MySQL-Tutorial >Wie verwende ich GROUP_CONCAT mit LEFT JOIN in MySQL korrekt, um Lösungen pro Ticket zu verketten?

Wie verwende ich GROUP_CONCAT mit LEFT JOIN in MySQL korrekt, um Lösungen pro Ticket zu verketten?

Barbara Streisand
Barbara StreisandOriginal
2024-10-27 10:35:03634Durchsuche

How to Correctly Use GROUP_CONCAT with LEFT JOIN in MySQL to Concatenate Solutions per Ticket?

Problem und Lösung von MySQL GROUP_CONCAT mit LEFT JOIN

In MySQL wird die Funktion GROUP_CONCAT häufig zum Verketten von Zeichenfolgen aus mehreren Zeilen in einer Gruppe verwendet . Wenn Sie diese Funktion jedoch mit einem LEFT JOIN verwenden, kann es vorkommen, dass mehrere Zeilen zu einer einzigen Zeile zusammengefasst werden, anstatt getrennt zu werden.

Problembeschreibung

Stellen Sie sich das folgende Szenario vor:

  • Zwei Tabellen, „Tickets“ und „Lösungen“, die eine Helpdesk-Datenbank darstellen
  • Jedes Ticket hat eine oder mehrere entsprechende Lösungen
  • Ziel: Erstellen Sie eine Abfrage, die alle Lösungen für jedes Ticket kombiniert

Die verwendete Abfrage:

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

Problem

Dies Die Abfrage gibt nur eine Zeile zurück, wobei die Informationen von Ticket 1 und die Lösungseinträge von Ticket 1 und Ticket 2 miteinander verkettet sind.

Lösung

Um dieses Problem zu beheben, verwenden Sie eine Unterabfrage oder abgeleitete Tabelle innerhalb der JOIN-Anweisung, um die Lösungen nach Ticket-ID zu gruppieren:

Lösung 1: Unterabfrage verwenden

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

Lösung 2: Abgeleitete Tabelle verwenden

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

Durch die Gruppierung der Lösungen vor dem Zusammenführen gibt die Abfrage jetzt separate Zeilen für jedes Ticket zurück, wobei die entsprechenden Lösungen in einer einzigen Zeichenfolge verkettet sind.

Das obige ist der detaillierte Inhalt vonWie verwende ich GROUP_CONCAT mit LEFT JOIN in MySQL korrekt, um Lösungen pro Ticket zu verketten?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn