Heim > Datenbank > MySQL-Tutorial > Wie rufe ich separate Zeilen für jedes Ticket mit zugehörigen Lösungen mithilfe von GROUP_CONCAT und LEFT JOIN in MySQL ab?

Wie rufe ich separate Zeilen für jedes Ticket mit zugehörigen Lösungen mithilfe von GROUP_CONCAT und LEFT JOIN in MySQL ab?

Susan Sarandon
Freigeben: 2024-10-26 10:05:29
Original
950 Leute haben es durchsucht

How to Retrieve Separate Rows for Each Ticket with Associated Solutions Using GROUP_CONCAT and LEFT JOIN in MySQL?

MySQL: JOINing von GROUP_CONCAT mit LEFT JOIN

In MySQL kann die Funktion GROUP_CONCAT in Verbindung mit LEFT JOIN verwendet werden, um Daten aus mehreren Tabellen abzurufen. Bei unsachgemäßer Verwendung kann es jedoch zu Leistungsproblemen kommen.

Problembeschreibung

Erwägen Sie eine Helpdesk-Datenbank mit Tabellen für Tickets (Tickets) und Lösungen (Solutions). Mit der folgenden Anweisung wird eine Abfrage geschrieben, um alle Tickets mit ihren entsprechenden Lösungseinträgen abzurufen:

<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>
Nach dem Login kopieren

Diese Abfrage gibt eine einzelne Zeile mit Informationen aus dem ersten Ticket und allen Lösungen aus beiden Tickets zurück. Dies ist unbeabsichtigt, da wir für jedes Ticket eine separate Zeile mit den zugehörigen Lösungen erwarten.

Lösung

Um dieses Problem zu beheben, kann die Abfrage wie folgt geändert werden:

<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>
Nach dem Login kopieren

In dieser überarbeiteten Abfrage ruft die Unterabfrage in der LEFT JOIN-Klausel die kombinierten Lösungen für jedes Ticket mithilfe von GROUP_CONCAT innerhalb der entsprechenden Gruppierung ab. Die äußere Abfrage verknüpft dann dieses Ergebnis mithilfe des Felds „ticket_id“ mit der Haupt-Tickets-Tabelle.

Alternative Lösung

Ein alternativer Ansatz besteht darin, eine verschachtelte Abfrage innerhalb der Haupt-SELECT-Anweisung zu verwenden:

<code class="sql">SELECT t.*,
       (SELECT GROUP_CONCAT(s.soution)
        FROM SOLUTIONS s
        WHERE s.ticket_id = t.ticket_id) AS combinedsolutions
FROM TICKETS t</code>
Nach dem Login kopieren

Dieser Ansatz erfüllt die gleiche Aufgabe, indem er die GROUP_CONCAT-Abfrage in die äußere SELECT-Anweisung einbettet.

Durch die Verwendung einer dieser Änderungen sollte die Abfrage nun korrekt separate Zeilen für jedes Ticket abrufen Zeile mit den Ticketinformationen und den entsprechenden Lösungen für dieses Ticket.

Das obige ist der detaillierte Inhalt vonWie rufe ich separate Zeilen für jedes Ticket mit zugehörigen Lösungen mithilfe von GROUP_CONCAT und LEFT JOIN in MySQL ab?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage