De fleste af de store RDBMS'er har en funktion, der gør det muligt for os at returnere vores forespørgselsresultater som en kommasepareret liste.
Det vil sige, at vi kan bruge en sådan funktion til at konvertere hver række til et separat listeelement inden for en kommasepareret liste.
Nedenfor er eksempler på, hvordan man opnår dette i nogle af de mere populære RDBMS'er.
MySQL
MySQL har GROUP_CONCAT()
funktion, der giver os mulighed for at udlæse vores forespørgsel i en kommasepareret liste:
SELECT GROUP_CONCAT(PetName)
FROM Pets;
Resultat:
Fluffy,Fetch,Scratch,Wag,Tweet,Fluffy,Bark,Meow
Vi kan også gøre ting som at fjerne duplikerede værdier (med DISTINCT
klausul), specificer en rækkefølge for resultaterne (med ORDER BY
klausul), og angiv en anden afgrænsning.
Se GROUP_CONCAT()
Funktion i MySQL for flere eksempler.
Oracle-database
Oracle Database har LISTAGG()
funktion:
SELECT LISTAGG(last_name, ', ')
FROM employees
WHERE job_id = 'IT_PROG';
Resultat:
Hunold, Ernst, Austin, Pataballa, Lorentz
Ligesom MySQL giver Oracle Database os også mulighed for at fjerne duplikerede værdier, angive en rækkefølge for resultaterne, angive en anden separator osv.
Se LISTAGG()
Funktion i Oracle for flere eksempler.
SQL-server
SQL Server har STRING_AGG()
funktion for at returnere vores resultater i en kommasepareret liste:
SELECT STRING_AGG(Genre, ',') AS Result FROM Genres
Resultat:
Rock,Jazz,Country,Pop,Blues,Hip Hop,Rap,Punk
Vi kan også fjerne duplikerede værdier, angive en rækkefølge for resultaterne, ændre afgrænseren osv.
Se Sådan returneres forespørgselsresultater som en kommasepareret liste i SQL Server for flere eksempler.
MariaDB
Ligesom MySQL har MariaDB også en GROUP_CONCAT()
funktion:
SELECT GROUP_CONCAT(PetName)
FROM Pets;
Resultat:
Fluffy,Fetch,Scratch,Wag,Tweet,Fluffy,Bark,Meow
Ligesom MySQL's funktion af samme navn, kan vi også gøre ting som at fjerne duplikerede værdier (med DISTINCT
klausul), specificer en rækkefølge for resultaterne (med ORDER BY
klausul), ændre separatoren osv.
En ting, som MariaDB har over MySQL, er LIMIT
klausul, som giver os mulighed for at begrænse antallet af resultater på listen.
Se MariaDB GROUP_CONCAT()
for flere eksempler.
PostgreSQL
Postgres har STRING_AGG()
funktion:
SELECT STRING_AGG(PetName, ',')
FROM Pets;
Resultat:
Fluffy,Fetch,Scratch,Wag,Tweet,Fluffy,Bark,Meow
Vi kan også fjerne duplikerede værdier (med DISTINCT
). klausul), specificer en rækkefølge for resultaterne (med ORDER BY
klausul), ændre separatoren osv.
Se STRING_AGG()
Funktion i PostgreSQL for flere eksempler.
SQLite
I SQLite kan vi bruge GROUP_CONCAT()
funktion til at transformere vores forespørgselsresultater til en kommasepareret liste:
SELECT group_concat(FirstName)
FROM Employee;
Resultat:
Andrew,Nancy,Jane,Margaret,Steve,Michael,Robert,Laura
Se hvordan GROUP_CONCAT()
Virker i SQLite for flere eksempler.
Flere kolonner
Ovenstående eksempler bruger alle en enkelt kolonne til listen. Vi kan også sammenkæde flere kolonner for at producere en liste, der inkluderer flere kolonner.
Antag, at vi har en tabel med følgende 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øre følgende for at udskrive begge kolonner i en enkelt række:
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