JOINで一方のテーブルの列をすべて選択する記述について紹介します。
例
次のテーブルを用意します。
Working テーブルid | name | value | category | memo |
1 | Penguin | 300 | B | 南国にすむペンギンです |
2 | Whale | 420 | M | 北極海のクジラです |
3 | Moffu | 880 | NULL | よくわからない生き物です |
4 | Camel | 220 | M | 砂漠にすむラクダです |
5 | Owl | 90 | B | 関東のフクロウです |
6 | Duck | 120 | B | そこらへんのアヒルです |
7 | Lizard | 60 | R | ひっそりと生きるトカゲです |
WorkingCategory テーブルid | category | name | flag |
1 | B | 鳥類 | 1 |
2 | B | 鳥類 | 2 |
3 | M | 哺乳類 | 1 |
4 | F | 魚類 | 1 |
以下のSQLでinner joinで結合してデータを選択します。
select * from Working inner join WorkingCategory on Working.category=WorkingCategory.category;
結果は以下の通りとなりますが、id, category 列が重複しています。
id | name | value | category | memo | id | category | name | flag |
1 | Penguin | 300 | B | 南国にすむペンギンです | 1 | B | 鳥類 | 1 |
5 | Owl | 90 | B | 関東のフクロウです | 1 | B | 鳥類 | 1 |
6 | Duck | 120 | B | そこらへんのアヒルです | 1 | B | 鳥類 | 1 |
1 | Penguin | 300 | B | 南国にすむペンギンです | 2 | B | 鳥類 | 2 |
5 | Owl | 90 | B | 関東のフクロウです | 2 | B | 鳥類 | 2 |
6 | Duck | 120 | B | そこらへんのアヒルです | 2 | B | 鳥類 | 2 |
2 | Whale | 420 | M | 北極海のクジラです | 3 | M | 哺乳類 | 1 |
4 | Camel | 220 | M | 砂漠にすむラクダです | 3 | M | 哺乳類 | 1 |
あいまいさを無くすために、以下のSQLに変更します。
select Working.id, Working.value, Working.category, Working.memo, WorkingCategory.id as cid, WorkingCategory.category as cc, WorkingCategory.name as categoryname, WorkingCategory.flag
from Working inner join WorkingCategory on Working.category=WorkingCategory.category;
id | name | value | category | memo | cid | cc | categoryname | categoryname | flag |
データは先の結果と同じ | | | | | | | | | |
上記のSQLで対応できますが、列数が増えると記述が大変です。
今回の例では、Workingテーブルのすべての列と、WorkingCategory のname列が表示できれば十分なため、もっと簡単にSQLを記述したいです。
対処法
テーブルのすべての列を表示する場合は、次の記述が利用できます。
SQL
以下のSQKを作成して実行します。
select Working.*, WorkingCategory.name as categoryname from Working
inner join WorkingCategory on Working.category=WorkingCategory.category;
Working.*
の記述で、 Workingテーブルのすべての列を選択できます。
実行結果
SQL文を実行すると、以下の結果となります。Workingテーブルのすべての列が選択できています。
id | name | value | category | memo | categoryname |
1 | Penguin | 300 | B | 南国にすむペンギンです | 鳥類 |
5 | Owl | 90 | B | 関東のフクロウです | 鳥類 |
6 | Duck | 120 | B | そこらへんのアヒルです | 鳥類 |
1 | Penguin | 300 | B | 南国にすむペンギンです | 鳥類 |
5 | Owl | 90 | B | 関東のフクロウです | 鳥類 |
6 | Duck | 120 | B | そこらへんのアヒルです | 鳥類 |
2 | Whale | 420 | M | 北極海のクジラです | 哺乳類 |
4 | Camel | 220 | M | 砂漠にすむラクダです | 哺乳類 |
著者
iPentec.com の代表。ハードウェア、サーバー投資、管理などを担当。
Office 365やデータベースの記事なども担当。
最終更新日: 2023-05-06
作成日: 2023-05-05