MySQLのGROUP_CONCAT・CONCAT・DISTINCTを使って単一カラムの値を引用符で囲む方法
MySQLで単一カラム内のカンマ区切りの値を、それぞれ引用符(シングルクォート)で囲んだ形式に変換したい場合は、GROUP_CONCAT()とREPLACE()、さらにCONCAT()を組み合わせることで実現できます。ここでは、実際の例を使って手順を詳しく解説します。
テーブルの作成
まずはサンプルとなるテーブルを作成しましょう。
mysql> create table DemoTable1799 ( EmployeeId varchar(20) ); Query OK, 0 rows affected (0.00 sec)
レコードの挿入
INSERTコマンドを使用して、テーブルにレコードを追加します。今回は、カンマ区切りの社員IDが格納されたデータを扱います。
mysql> insert into DemoTable1799 values('101,102,103,104');
Query OK, 1 row affected (0.00 sec)
mysql> insert into DemoTable1799 values('106,109');
Query OK, 1 row affected (0.00 sec)
レコードの表示
SELECT文でテーブル内のすべてのレコードを確認してみましょう。
mysql> select * from DemoTable1799;
このSQLを実行すると、次のような結果が出力されます。
+-----------------+ | EmployeeId | +-----------------+ | 101,102,103,104 | | 106,109 | +-----------------+ 2 rows in set (0.00 sec)
値を引用符で囲むクエリ
それでは本題です。GROUP_CONCATとCONCAT、そしてDISTINCTを組み合わせて、単一カラムの値を引用符で囲むクエリは以下の通りです。
mysql> select group_concat(distinct concat("'", replace(EmployeeId, "," , "','") , "'")) as Output from DemoTable1799;
実行すると、次のような出力が得られます。
+-------------------------------------+ | Output | +-------------------------------------+ | '101','102','103','104','106','109' | +-------------------------------------+ 1 row in set (0.00 sec)
クエリの仕組み
このクエリがどのように動作するのか、処理の流れを分解して見ていきましょう。
- replace(EmployeeId, ",", "','"):まず、各レコード内のカンマ「,」を「','」に置換します。これにより「101,102」は「101','102」という形になります。
- concat("'", ... , "'"):次に、先頭と末尾に引用符を追加することで、「101','102」が「'101','102'」という完全な形式へ変換されます。
- group_concat(distinct ...):最後に、全レコードの結果をカンマで連結し、DISTINCTによって重複する値を取り除きます。そのため、複数行に分かれていた値が1つの文字列にまとまります。
この手法は、IN句に渡す値のリストを動的に生成したい場合などに特に便利です。ぜひ実務でも活用してみてください。
-
MySQLで列の値と任意のテキストを連結して1つの列に表示する方法
MySQLで列の値とテキストを連結する方法MySQLでは、CONCAT()関数を使用することで、テーブルの列の値と任意のテキストを連結し、結果を1つの列として表示できます。本記事では、サンプルテーブルを作成し、実際に文字列を連結して表示するまでの手順を具体例とともに解説します。1. テーブルの作成まず、テーブルを作成しましょう。mysql> create table DemoTable -> ( -> Id int, -> Name varchar(20) -> );Query OK, 0 rows affected (0.93 sec)こ
-
MySQLで1つのINSERT文を使って列に複数の値を一括挿入する方法
はじめにMySQLでは、1つのINSERT文を繰り返し実行しなくても、単一のクエリだけで同じ列に複数の値を挿入できます。VALUES句の後ろに、挿入したい値をカンマ区切りのタプル(行)として列挙するだけです。この方法はデータベースへの接続回数を減らせるため、大量のデータを登録する際にパフォーマンス面でも大きなメリットがあります。基本構文複数の値を1つの列に挿入する場合の基本構文は以下のとおりです。INSERT INTO テーブル名 VALUES(値1),(値2),...,(値N);このように、各値を丸括弧で囲み、カンマ(,)で区切って並べることで、1回のクエリで複数行をまとめて挿入できます。実