MySQL
 Computer >> コンピューター >  >> プログラミング >> MySQL

MySQLですべてのレコードを1行にまとめて取得する方法(GROUP_CONCAT活用)

GROUP_CONCAT()を使って複数行のデータを1行に連結する

テーブル内の複数レコードを、区切り文字でつなげて1つの文字列として取得したい場合は、MySQLのGROUP_CONCAT()関数を使用します。この関数を使うことで、パスのような形式の文字列も簡単に生成できます。

ここでは、「E:/AllPrograms/ChatApplicationInJava/MainFolder」のようにフォルダ階層を表す文字列を作成する例を見ていきましょう。

1. サンプルテーブルの作成

まず、Locationカラムを持つテーブルを作成します。

mysql> create table DemoTable1355
    -> (
    -> Location text
    -> );
Query OK, 0 rows affected (0.57 sec)

2. レコードの挿入

INSERT文でいくつかのデータを登録します。

mysql> insert into DemoTable1355 values('E:');
Query OK, 1 row affected (0.11 sec)
mysql> insert into DemoTable1355 values('AllPrograms');
Query OK, 1 row affected (0.18 sec)
mysql> insert into DemoTable1355 values('ChatApplicationInJava');
Query OK, 1 row affected (0.38 sec)
mysql> insert into DemoTable1355 values('MainFolder');
Query OK, 1 row affected (0.23 sec)

3. 登録内容の確認

SELECT文で全レコードを表示してみましょう。

mysql> select * from DemoTable1355;

実行結果は以下の通りです。

+-----------------------+
| Location              |
+-----------------------+
| E:                     |
| AllPrograms           |
| ChatApplicationInJava |
| MainFolder            |
+-----------------------+
4 rows in set (0.00 sec)

現時点では4件のレコードがそれぞれ別の行に格納されています。

4. GROUP_CONCAT()ですべての値を1行にまとめる

すべての項目を1行で返すには、次のクエリを実行します。separator句で区切り文字「/」を指定しているのがポイントです。

mysql> select group_concat(Location separator '/') from DemoTable1355;

実行結果は以下の通りです。

+-------------------------------------------------+
| group_concat(Location separator '/')             |
+-------------------------------------------------+
| E:/AllPrograms/ChatApplicationInJava/MainFolder |
+-------------------------------------------------+
1 row in set (0.00 sec)

補足:separatorの指定について

separatorは省略可能で、省略した場合のデフォルト区切り文字は「,」(カンマ)になります。「-」や「>」など、任意の文字列を指定できるので、用途に応じて柔軟に使い分けられます。

このようにGROUP_CONCAT()を使えば、複数行のデータを集約して1つの文字列として扱えるため、タグの一覧表示や階層パスの生成など、さまざまな場面で役立ちます。

  1. MySQLで重複行を除外して1行だけ取得する方法(DISTINCTの使い方)

    MySQLで重複行から1行のみを返すには?MySQLのテーブルに同じ値を持つ重複行が存在する場合、DISTINCTキーワードを使うことで、重複を排除した一意な行だけを取得できます。この記事では、実際にテーブルを作成し、データを挿入したうえで、DISTINCTによる重複除去の手順を解説します。1. テーブルを作成するまず、サンプル用のテーブルを作成します。mysql> create table DemoTable1998 ( Name varchar(20) ); Query OK, 0 rows affected (0.61 sec)2. レコードを挿入するINSERTコマンドを

  2. MySQLクエリで列名にエイリアス(別名)を設定する方法

    MySQLでは、SELECT文を使って列名に「エイリアス(別名)」を設定できます。エイリアスを利用すると、出力結果の見出しをわかりやすい名前に変更でき、レポート作成やアプリケーションでのデータ表示が格段に読みやすくなります。列名にエイリアスを設定する基本構文SELECT yourColumnName1 anyAliasName1, yourColumnName2 anyAliasName2FROM yourTableName anyAliasName;このように、列名の後にスペースを空けて任意の別名を記述するだけで、その列の表示名がエイリアスに置き換わります。テーブル名にも同様にエイリアスを設