● 2_04_12-検索処理(副問い合わせ-3 複数列副問い合わせ)(select)
いきなりSQLの仕様から入るとややこしいので、具体例から行きます。
下記は先の相関副問い合わせで使ったテーブル「e_shouhin_t」、商品一覧のデータです。カラム名は分かり易いように別名を付けています。

下の段の2つを赤く塗っています。
仮に社内で、上のほうから「7,800円以上の商品と同じサイズ、同じカテゴリの商品がどれだけあるか調べてくれ。」
と言われたとします。
これが先の赤く塗っているデータが上からの指示に相当するデータです。
つまり、7,800円以上の商品は2つ有り、
「サイズはM、カテゴリはts(Tシャツ)」と、
「サイズはL、カテゴリはts(Tシャツ)」
の商品を検索すればいいわけです。
もし処理を分ければ以上のようになります。
これをSQL1行で書くと以下になります。
SELECT
*
FROM
e_shouhin_t
WHERE
( e_shouhin_size, e_shouhin_group )
in
(SELECT e_shouhin_size, e_shouhin_group FROM e_shouhin_t WHERE e_shouhin_kakaku
>= 7800) |
実行すると以下が検索されます。

赤く塗っている部分を見てもらうと、
「サイズはM、カテゴリはts(Tシャツ)」と、
「サイズはL、カテゴリはts(Tシャツ)」
となっています。
7,800円以上の商品を検索したのではなく、7,800円以上の商品の複数のカラムの組み合わせを検索したのです。
この辺を勘違いしないで下さい。
SQLの赤の文字の部分が対応しています。
PostgreSQLの正式マニュアルでは以下のページが副問い合わせに相当します。
4.2.9.
スカラ副問い合わせ
9.16.
副問い合わせ表現
戻る
|