このエントリーをはてなブックマークに追加


SELECT...IN句をサブクエリーにするサンプル

まずはIN句について調べている方は、以下のリンク記事が参考になりますので読んでみてください。

IN句にたくさんの値を記述するのも大変な場合、SELECTにより取得した値群をIN句として使用することができます。 以下にIN句内にSELECTを使用したサンプルを記します。
尚、動作確認環境に記したPostgreSQL, MySQL, SQLite3で動作確認を行いました。

関連記事

動作確認環境

  • OS
    $ lsb_release -d
    Description:    Ubuntu 12.04.4 LTS
  • PostgreSQL postgres=# select version();
                                                   version
    ------------------------------------------------------------------------------------------------------
     PostgreSQL 9.1.12 on i686-pc-linux-gnu, compiled by gcc (Ubuntu/Linaro 4.6.3-1ubuntu5) 4.6.3, 32-bit
  • MySQL
    mysql> select version();
    +-------------------------+
    | version()               |
    +-------------------------+
    | 5.5.35-0ubuntu0.12.04.2 |
    +-------------------------+
    1 row in set (0.00 sec)-SQLite3
  • SQLite3
    $ sqlite3 --version
    3.7.9 2011-11-01 00:52:41 c7c6050ef060877ebe77b41d959e9df13f8c9b5e

使用したサンプルテーブル

以下のSQLによりテーブルを作成しデータをINSERTしました。
filesql1.sql 改行コードLF

CREATE TABLE t1 (
    id      INT PRIMARY KEY
   ,country VARCHAR(20)
   ,capital VARCHAR(20)
);
INSERT INTO t1 VALUES (1,'Japan','Tokyo');
INSERT INTO t1 VALUES (2,'China','Beijing');
INSERT INTO t1 VALUES (3,'Australia','Canberra');
INSERT INTO t1 VALUES (4,'Thailand','Bangkok');
INSERT INTO t1 VALUES (5,'Indonesia','Jakarta');
CREATE TABLE t2 (
    id       INT
   ,group_id INT
);
INSERT INTO t2 VALUES (1, 1);
INSERT INTO t2 VALUES (2, 2);
INSERT INTO t2 VALUES (3, 1);
INSERT INTO t2 VALUES (4, 2);
INSERT INTO t2 VALUES (5, 1);

テーブル構成は以下の通りです。

  • t1
    no primarycountrycapital
    1JapanTokyo
    2ChinaBeijing
    3AustraliaCanberra
    4ThailandBangkok
    5IndonesiaJakarta
  • t2
    idgroup_id
    11
    22
    31
    42
    51

IN句内にSELECTを使って絞り込む

IN句にSELECTを書くことができます。
以下に上記テーブル(t1,t2)を使用した場合の実行例を記します。

mysql> select * from t1 where id in (select id from t2 where group_id = 2);
+----+----------+---------+
| id | country  | capital |
+----+----------+---------+
|  2 | China    | Beijing |
|  4 | Thailand | Bangkok |
+----+----------+---------+
mysql> select * from t1 where id in (select id from t2 where group_id = 1);
+----+-----------+----------+
| id | country   | capital  |
+----+-----------+----------+
|  1 | Japan     | Tokyo    |
|  3 | Australia | Canberra |
|  5 | Indonesia | Jakarta  |
+----+-----------+----------+

以上、IN句内にSELECTを使用するサンプルSQL構文でした。


添付ファイル: filesql1.sql 512件 [詳細]

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2019-05-28 (火) 22:04:51