MySQLのUNIONクエリでテーブル名を列として取得する方法
UNIONクエリでテーブル名を列として表示するには?
MySQLのUNION句を使って複数のテーブルを結合して取得する際、「どのレコードがどのテーブル由来なのか」を判別したいケースはよくあります。このような場合、ASコマンドを使えば、テーブル名を文字列リテラルとして列に含めることができます。
実際にサンプルを見ながら確認していきましょう。
1. 最初のテーブルを作成する
まず、以下のようにテーブルを作成します。
mysql> create table DemoTable ( Name varchar(20) ); Query OK, 0 rows affected (0.56 sec)
INSERTコマンドでレコードを挿入します。
mysql> insert into DemoTable values('John');
Query OK, 1 row affected (0.18 sec)SELECT文ですべてのレコードを表示してみましょう。
mysql> select * from DemoTable;
実行結果は以下の通りです。
+------+ | Name | +------+ | John | +------+ 1 row in set (0.00 sec)
2. 2つ目のテーブルを作成する
続いて、2つ目のテーブルを作成します。
mysql> create table DemoTable2 ( Name varchar(20) ); Query OK, 0 rows affected (0.59 sec)
同様にINSERTコマンドでレコードを挿入します。
mysql> insert into DemoTable2 values('Bob');
Query OK, 1 row affected (0.20 sec)SELECT文で内容を確認します。
mysql> select *from DemoTable2;
実行結果は以下の通りです。
+------+ | Name | +------+ | Bob | +------+ 1 row in set (0.00 sec)
3. UNIONクエリでテーブル名を列として選択する
ここが本題のポイントです。各SELECT文の中で、シングルクォートで囲んだテーブル名をASを使った別名(エイリアス)付きで指定することで、UNION結果にテーブル名列を追加できます。
mysql> select 'DemoTable' as DemoTable,Name from DemoTable union select 'DemoTable2' as DemoTable2,Name from DemoTable2 ;
実行結果は以下の通りです。
+--------------+------+ | DemoTable | Name | +--------------+------+ | DemoTable | John | | DemoTable2 | Bob | +--------------+------+ 2 rows in set (0.00 sec)
解説
出力結果を見ると、最初の列「DemoTable」に各レコードの出身テーブル名が表示されていることがわかります。これは、'DemoTable'や'DemoTable2'という固定の文字列リテラルをSELECT句内で返し、それにASで列名を付けているためです。UNIONは複数のSELECT結果を縦に連結するため、この手法を使えばどの行がどのテーブルから取得されたものか一目で判別できるようになります。
データの統合や移行処理など、複数テーブルのデータをまとめて扱う際に非常に便利なテクニックなので、ぜひ活用してください。
-
【MySQL】名前列の最後のスペースより左側の文字列をすべて抽出する方法
名前データが格納された列から、フルネームのうち「最後のスペースより左側」の部分だけを取り出したい場面はよくあります。例えば、姓名が混在するデータから名(ファーストネーム)部分を抽出するようなケースです。MySQLでは LEFT()、LENGTH()、LOCATE()、REVERSE() の各関数を組み合わせることで、この処理を簡単に実現できます。 1. サンプルテーブルの作成 まず、名前を格納するテーブルを作成します。 mysql> create table DemoTable1939 ( F
-
SELECTでテーブル全体を返すMySQLストアドプロシージャの作成方法
MySQLでは、ストアドプロシージャ内でSELECT文を実行することで、引数で渡した条件に一致するレコード(この例ではテーブル全体)を結果として返すことができます。ここでは、テーブルの作成からプロシージャの呼び出しまで、手順を追って解説します。 1. サンプルテーブルの作成 まず、テーブルを作成します。 mysql> create table DemoTable1971 ( StudentId int NOT NULL AUTO_INCREMENT PRIMARY KEY, &n