Die meisten großen RDBMSs haben eine Funktion, die es uns ermöglicht, unsere Abfrageergebnisse als kommagetrennte Liste zurückzugeben.
Das heißt, wir können eine solche Funktion verwenden, um jede Zeile innerhalb einer durch Kommas getrennten Liste in ein separates Listenelement umzuwandeln.
Nachfolgend finden Sie Beispiele dafür, wie dies in einigen der bekannteren RDBMSs erreicht werden kann.
MySQL
MySQL hat den GROUP_CONCAT()
Funktion, mit der wir unsere Abfrageergebnisse in einer kommagetrennten Liste ausgeben können:
SELECT GROUP_CONCAT(PetName)
FROM Pets;
Ergebnis:
Fluffy,Fetch,Scratch,Wag,Tweet,Fluffy,Bark,Meow
Wir können auch Dinge tun wie doppelte Werte entfernen (mit dem DISTINCT
-Klausel), geben Sie eine Reihenfolge für die Ergebnisse an (mit der ORDER BY
-Klausel), und geben Sie ein anderes Trennzeichen an.
Siehe GROUP_CONCAT()
Funktion in MySQL für weitere Beispiele.
Oracle-Datenbank
Oracle Database hat die LISTAGG()
Funktion:
SELECT LISTAGG(last_name, ', ')
FROM employees
WHERE job_id = 'IT_PROG';
Ergebnis:
Hunold, Ernst, Austin, Pataballa, Lorentz
Wie MySQL erlaubt uns auch Oracle Database, doppelte Werte zu entfernen, eine Reihenfolge für die Ergebnisse anzugeben, ein anderes Trennzeichen anzugeben usw.
Siehe LISTAGG()
Funktion in Oracle für weitere Beispiele.
SQL-Server
SQL Server hat den STRING_AGG()
Funktion, um unsere Ergebnisse in einer durch Kommas getrennten Liste zurückzugeben:
SELECT STRING_AGG(Genre, ',') AS Result FROM Genres
Ergebnis:
Rock,Jazz,Country,Pop,Blues,Hip Hop,Rap,Punk
Wir können auch doppelte Werte entfernen, eine Reihenfolge für die Ergebnisse festlegen, das Trennzeichen ändern usw.
Weitere Beispiele finden Sie unter Zurückgeben von Abfrageergebnissen als kommagetrennte Liste in SQL Server.
MariaDB
Wie MySQL hat auch MariaDB einen GROUP_CONCAT()
Funktion:
SELECT GROUP_CONCAT(PetName)
FROM Pets;
Ergebnis:
Fluffy,Fetch,Scratch,Wag,Tweet,Fluffy,Bark,Meow
Wie die gleichnamige Funktion von MySQL können wir auch Dinge wie das Entfernen doppelter Werte (mit dem DISTINCT
-Klausel), geben Sie eine Reihenfolge für die Ergebnisse an (mit der ORDER BY
-Klausel), das Trennzeichen ändern usw.
Eine Sache, die MariaDB gegenüber MySQL hat, ist jedoch das LIMIT
-Klausel, die uns die Möglichkeit gibt, die Anzahl der Ergebnisse in der Liste zu begrenzen.
Siehe MariaDB GROUP_CONCAT()
für weitere Beispiele.
PostgreSQL
Postgres hat den STRING_AGG()
Funktion:
SELECT STRING_AGG(PetName, ',')
FROM Pets;
Ergebnis:
Fluffy,Fetch,Scratch,Wag,Tweet,Fluffy,Bark,Meow
Wir können auch doppelte Werte entfernen (mit dem DISTINCT
-Klausel), geben Sie eine Reihenfolge für die Ergebnisse an (mit der ORDER BY
-Klausel), das Trennzeichen ändern usw.
Siehe STRING_AGG()
Funktion in PostgreSQL für weitere Beispiele.
SQLite
In SQLite können wir den GROUP_CONCAT()
verwenden Funktion, um unsere Abfrageergebnisse in eine kommagetrennte Liste umzuwandeln:
SELECT group_concat(FirstName)
FROM Employee;
Ergebnis:
Andrew,Nancy,Jane,Margaret,Steve,Michael,Robert,Laura
Siehe Wie GROUP_CONCAT()
Funktioniert in SQLite für weitere Beispiele.
Mehrere Spalten
Die obigen Beispiele verwenden alle eine einzige Spalte für die Liste. Wir können auch mehrere Spalten verketten, um eine Liste zu erstellen, die mehrere Spalten enthält.
Angenommen, wir haben eine Tabelle mit den folgenden Daten:
SELECT TaskId, TaskName
FROM Tasks;
Ergebnis:
TaskId TaskName ------ ------------ 1 Feed cats 2 Water dog 3 Feed garden 4 Paint carpet 5 Clean roof 6 Feed cats
In SQL Server können wir Folgendes tun, um beide Spalten in einer einzigen Zeile auszugeben:
SELECT STRING_AGG(CONCAT(TaskId, ') ', TaskName), ' ')
FROM Tasks
Ergebnis:
1) Feed cats 2) Water dog 3) Feed garden 4) Paint carpet 5) Clean roof 6) Feed cats