テーブルを結合後に検索条件を設定したい!と思うことがありました。
DBのテーブル2つを結合する際にWHEREで検索条件を設定することで、任意のレコードを抽出できます。
ちなみに、動作はPostgreSQLで試しました。
テーブルを2つ準備
SELECT * FROM book1;
id | name
----+-----------
1 | 面白い本1
2 | 面白い本2
3 | 面白い本3
(3 rows)
SELECT * FROM book2;
id | name
----+---------
1 | 良い本1
2 | 良い本2
3 | 良い本3
(3 rows)
book1とbook2というテーブルに、それぞれ3レコード分のデータを入れました。
カラムはidとnameしかない簡単なものにしました。
まずは2つのテーブルを結合
SELECT * FROM book1
UNION ALL
SELECT * FROM book2;
id | name
----+-----------
1 | 面白い本1
2 | 面白い本2
3 | 面白い本3
1 | 良い本1
2 | 良い本2
3 | 良い本3
(6 rows)
UNION ALLでテーブルを結合できます。重複したレコードを削除する場合はUNIONを使用します。
テーブルを結合後に検索条件を設定
SELECT * FROM
( SELECT * FROM book1 UNION ALL SELECT * FROM book2 ) AS book
WHERE id=1;
id | name
----+-----------
1 | 面白い本1
1 | 良い本1
(2 rows)
先ほどUNION ALLで結合したレコードにASでbookという名前をつけ、WHERE条件を設定してからSELECTします。ASで名前をつけないと、失敗します。
ちなみにそれぞれ検索条件を設定する場合
SELECT * FROM book1 WHERE id=1
UNION ALL
SELECT * FROM book2 WHERE id=2;
id | name
----+-----------
1 | 面白い本1
2 | 良い本2
(2 rows)
それぞれのテーブルで検索条件をつけてSELECTする場合は、どちらにもWHEREを設定します。
テーブルごとに異なる条件で検索したい時などに使えます。
コメント