Heim >Datenbank >MySQL-Tutorial >Wie kann ich mithilfe von GROUP_CONCAT Werte aus mehreren Zeilen in SQLite effizient zu einer einzigen Zeichenfolge verketten?

Wie kann ich mithilfe von GROUP_CONCAT Werte aus mehreren Zeilen in SQLite effizient zu einer einzigen Zeichenfolge verketten?

Susan Sarandon
Susan SarandonOriginal
2024-11-04 18:57:011109Durchsuche

How can I efficiently concatenate values from multiple rows into a single string in SQLite using GROUP_CONCAT?

GROUP_CONCAT in SQLite verstehen

Beim Umgang mit relationalen Datenbankschemata ist es oft notwendig, Werte aus mehreren Zeilen einer Tabelle zu einer einzigen zu verketten Zeichenfolge. In SQLite bietet die Funktion GROUP_CONCAT eine leistungsstarke Lösung für diese Aufgabe.

Ihre Daten und Ziel

Betrachten Sie die folgenden Beispieldaten, die mit Abstracts verknüpfte Autoren darstellen:

1 A
1 B
1 C
1 D
2 E
2 F
3 G
3 H
3 I
3 J
3 K

Sie möchten diese Daten in ein Format umwandeln, in dem jede eindeutige Abstract-ID (_id) mit einer durch Kommas getrennten Liste der entsprechenden Autorennamen verknüpft ist, etwa so:

1 A,B,C,D
2 E,F

Verwendung von GROUP_CONCAT mit Aggregatfunktionen

Die Funktion GROUP_CONCAT kann in Kombination mit Aggregatfunktionen und einer GROUP BY-Klausel dieses Ziel erreichen. Ein gängiger Ansatz besteht darin, eine Zwischentabelle mithilfe einer Unterabfrage zu erstellen, wie Sie es ursprünglich versucht haben. Sie haben jedoch einen entscheidenden Schritt verpasst.

Der richtige Ansatz

Um GROUP_CONCAT korrekt zu verwenden, führen Sie die folgenden Schritte aus:

  1. Verbinden Sie die Tabellen:Verwenden Sie JOIN-Klauseln, um Beziehungen zwischen den beteiligten Tabellen herzustellen und sicherzustellen, dass Zeilen für die Verkettung korrekt gruppiert werden.
  2. Verwenden Sie eine Aggregatfunktion:Wenden Sie eine Aggregatfunktion an ( B. GROUP_CONCAT), um Werte für doppelte Gruppen zu kombinieren, die durch die GROUP BY-Klausel identifiziert werden.
  3. GROUP BY-Klausel: Fügen Sie nach der FROM-Klausel eine GROUP BY-Klausel ein, um anzugeben, welche Spalte(n) verwendet werden sollen Gruppieren Sie die Daten nach.

Korrigierte Abfrage

Hier ist eine korrigierte Abfrage, die diesen Prinzipien folgt:

SELECT ABSTRACTS_ITEM._id, GROUP_CONCAT(ABSTRACT_AUTHOR.NAME) AS GroupedName
FROM ABSTRACTS_ITEM 
JOIN AUTHORS_ABSTRACT ON ABSTRACTS_ITEM._id = AUTHORS_ABSTRACT.ABSTRACTSITEM_ID
JOIN ABSTRACT_AUTHOR ON ABSTRACT_AUTHOR._id = AUTHORS_ABSTRACT.ABSTRACTAUTHOR_ID
GROUP BY ABSTRACTS_ITEM._id;

Alternative Abfrage

Alternativ können Sie den Unterabfrageansatz wie ursprünglich versucht verwenden, jedoch mit der richtigen Syntax:

SELECT ID,
GROUP_CONCAT(NAME) 
FROM
    (select ABSTRACTS_ITEM._id AS ID,
     Name
     from
    ABSTRACTS_ITEM , ABSTRACT_AUTHOR , AUTHORS_ABSTRACT
    where
    ABSTRACTS_ITEM._id = AUTHORS_ABSTRACT.ABSTRACTSITEM_ID
    and
    ABSTRACT_AUTHOR._id = AUTHORS_ABSTRACT.ABSTRACTAUTHOR_ID)
GROUP BY ID;

Beide Abfragen verketten erfolgreich die Autorennamen für jede Abstract-ID , Bereitstellung des gewünschten Ausgabeformats.

Das obige ist der detaillierte Inhalt vonWie kann ich mithilfe von GROUP_CONCAT Werte aus mehreren Zeilen in SQLite effizient zu einer einzigen Zeichenfolge 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