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