De flesta av de stora RDBMS:erna har en funktion som gör att vi kan returnera våra frågeresultat som en kommaseparerad lista.
Det vill säga, vi kan använda en sådan funktion för att konvertera varje rad till ett separat listobjekt, inom en kommaseparerad lista.
Nedan finns exempel på hur man uppnår detta i några av de mer populära RDBMS.
MySQL
MySQL har GROUP_CONCAT()
funktion som låter oss mata ut våra sökfrågor i en kommaseparerad lista:
SELECT GROUP_CONCAT(PetName)
FROM Pets;
Resultat:
Fluffy,Fetch,Scratch,Wag,Tweet,Fluffy,Bark,Meow
Vi kan också göra saker som att ta bort dubbletter av värden (med DISTINCT
sats), ange en ordning för resultaten (med ORDER BY
sats), och ange en annan avgränsare.
Se GROUP_CONCAT()
Funktion i MySQL för fler exempel.
Oracle Database
Oracle Database har LISTAGG()
funktion:
SELECT LISTAGG(last_name, ', ')
FROM employees
WHERE job_id = 'IT_PROG';
Resultat:
Hunold, Ernst, Austin, Pataballa, Lorentz
Precis som MySQL tillåter Oracle Database oss också att ta bort dubbletter av värden, ange en ordning för resultaten, ange en annan separator, etc.
Se LISTAGG()
Funktion i Oracle för fler exempel.
SQL-server
SQL Server har STRING_AGG()
funktion för att returnera våra resultat i en kommaseparerad lista:
SELECT STRING_AGG(Genre, ',') AS Result FROM Genres
Resultat:
Rock,Jazz,Country,Pop,Blues,Hip Hop,Rap,Punk
Vi kan också ta bort dubbletter av värden, ange en ordning för resultaten, ändra avgränsaren etc.
Se Hur man returnerar frågeresultat som en kommaseparerad lista i SQL Server för fler exempel.
MariaDB
Precis som MySQL har MariaDB också en GROUP_CONCAT()
funktion:
SELECT GROUP_CONCAT(PetName)
FROM Pets;
Resultat:
Fluffy,Fetch,Scratch,Wag,Tweet,Fluffy,Bark,Meow
Liksom MySQL:s funktion med samma namn kan vi också göra saker som att ta bort dubbletter av värden (med DISTINCT
sats), ange en ordning för resultaten (med ORDER BY
sats), ändra avgränsaren, etc.
Men en sak som MariaDB har över MySQL är LIMIT
klausul, som ger oss möjlighet att begränsa antalet resultat i listan.
Se MariaDB GROUP_CONCAT()
för fler exempel.
PostgreSQL
Postgres har den STRING_AGG()
funktion:
SELECT STRING_AGG(PetName, ',')
FROM Pets;
Resultat:
Fluffy,Fetch,Scratch,Wag,Tweet,Fluffy,Bark,Meow
Vi kan också ta bort dubbletter av värden (med DISTINCT
). sats), ange en ordning för resultaten (med ORDER BY
sats), ändra avgränsaren, etc.
Se STRING_AGG()
Funktion i PostgreSQL för fler exempel.
SQLite
I SQLite kan vi använda GROUP_CONCAT()
funktion för att omvandla våra frågeresultat till en kommaseparerad lista:
SELECT group_concat(FirstName)
FROM Employee;
Resultat:
Andrew,Nancy,Jane,Margaret,Steve,Michael,Robert,Laura
Se hur GROUP_CONCAT()
Fungerar i SQLite för fler exempel.
Flera kolumner
Ovanstående exempel använder alla en enda kolumn för listan. Vi kan också sammanfoga flera kolumner för att skapa en lista som innehåller flera kolumner.
Anta att vi har en tabell med följande data:
SELECT TaskId, TaskName
FROM Tasks;
Resultat:
TaskId TaskName ------ ------------ 1 Feed cats 2 Water dog 3 Feed garden 4 Paint carpet 5 Clean roof 6 Feed cats
I SQL Server kan vi göra följande för att mata ut båda kolumnerna i en enda rad:
SELECT STRING_AGG(CONCAT(TaskId, ') ', TaskName), ' ')
FROM Tasks
Resultat:
1) Feed cats 2) Water dog 3) Feed garden 4) Paint carpet 5) Clean roof 6) Feed cats