MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

So erhalten Sie mehrere Zeilen in eine durch Kommas getrennte Liste in SQL

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