主要なRDBMSのほとんどには、クエリ結果をコンマ区切りのリストとして返すことができる関数があります。
つまり、このような関数を使用して、各行をコンマ区切りのリスト内の個別のリスト項目に変換できます。
以下は、より一般的なRDBMSのいくつかでこれを実現する方法の例です。
MySQL
MySQLにはGROUP_CONCAT()
があります クエリ結果をコンマ区切りのリストで出力できるようにする関数:
SELECT GROUP_CONCAT(PetName)
FROM Pets;
結果:
Fluffy,Fetch,Scratch,Wag,Tweet,Fluffy,Bark,Meow
また、重複する値を削除するなどのこともできます(DISTINCT
を使用) 句)、結果の順序を指定します(ORDER BY
を使用) 句)、別の区切り文字を指定します。
GROUP_CONCAT()
を参照してください その他の例については、MySQLで機能してください。
Oracleデータベース
OracleDatabaseにはLISTAGG()
があります 機能:
SELECT LISTAGG(last_name, ', ')
FROM employees
WHERE job_id = 'IT_PROG';
結果:
Hunold, Ernst, Austin, Pataballa, Lorentz
MySQLと同様に、Oracle Databaseでは、重複する値の削除、結果の順序の指定、別の区切り文字の指定なども可能です。
LISTAGG()
を参照してください その他の例については、Oracleで機能してください。
SQL Server
SQLServerにはSTRING_AGG()
があります 結果をコンマ区切りのリストで返す関数:
SELECT STRING_AGG(Genre, ',') AS Result FROM Genres
結果:
Rock,Jazz,Country,Pop,Blues,Hip Hop,Rap,Punk
重複する値を削除したり、結果の順序を指定したり、区切り文字を変更したりすることもできます。
その他の例については、SQLServerでクエリ結果をコンマ区切りリストとして返す方法を参照してください。
MariaDB
MySQLと同様に、MariaDBにもGROUP_CONCAT()
があります 機能:
SELECT GROUP_CONCAT(PetName)
FROM Pets;
結果:
Fluffy,Fetch,Scratch,Wag,Tweet,Fluffy,Bark,Meow
同じ名前のMySQLの関数と同様に、重複する値を削除するなどのこともできます(DISTINCT
を使用) 句)、結果の順序を指定します(ORDER BY
を使用) 句)
ただし、MariaDBがMySQLに対して持っていることの1つは、LIMIT
です。 句。リスト内の結果の数を制限する機能を提供します。
MariaDBのGROUP_CONCAT()
を参照してください その他の例については。
PostgreSQL
PostgresにはSTRING_AGG()
があります 機能:
SELECT STRING_AGG(PetName, ',')
FROM Pets;
結果:
Fluffy,Fetch,Scratch,Wag,Tweet,Fluffy,Bark,Meow
重複する値を削除することもできます(DISTINCT
を使用) 句)、結果の順序を指定します(ORDER BY
を使用) 句)、セパレータを変更するなど。
STRING_AGG()
を参照してください その他の例については、PostgreSQLで機能してください。
SQLite
SQLiteでは、GROUP_CONCAT()
を使用できます クエリ結果をコンマ区切りのリストに変換する関数:
SELECT group_concat(FirstName)
FROM Employee;
結果:
Andrew,Nancy,Jane,Margaret,Steve,Michael,Robert,Laura
GROUP_CONCAT()
の方法をご覧ください その他の例についてはSQLiteで動作します。
複数の列
上記の例はすべて、リストに1つの列を使用しています。複数の列を連結して、複数の列を含むリストを作成することもできます。
次のデータを含むテーブルがあるとします。
SELECT TaskId, TaskName
FROM Tasks;
結果:
TaskId TaskName ------ ------------ 1 Feed cats 2 Water dog 3 Feed garden 4 Paint carpet 5 Clean roof 6 Feed cats
SQL Serverでは、次の手順を実行して、両方の列を1つの行に出力できます。
SELECT STRING_AGG(CONCAT(TaskId, ') ', TaskName), ' ')
FROM Tasks
結果:
1) Feed cats 2) Water dog 3) Feed garden 4) Paint carpet 5) Clean roof 6) Feed cats