「販売単価(sel_price)が、全体の平均の販売単価より高い商品」を選び出すには、スカラ・サブクエリを使えば実現出来ます。今度は少しこの条件を変えて「商品分類(category_id)ごとに平均販売単価より高い商品」を、商品分類のグループから選び出すことを考えてみましょう。
エラーになる理由は、前節でも述べたとおり、このサブクエリが複数行を返してしまい、スカラ・サブクエリにならないからです。WHERE 句でサブクエリを使用する場合は、必ず結果は 1 行である必要があります。
このような場合に使用するのが相関サブクエリです。相関サブクエリは、テーブル全体ではなく、テーブルの一部のレコード集合に限定した比較をしたい場合に使います。
WHERE I1.category_id = I2.category_id
上記が、相関サブクエリになる。
相関サブクエリの注意点
これは、サブクエリの中にあった条件を、外側に移動させただけで、その他は何の変更も加えていません。ところが、この SELECT 文はエラーになって正しく実行出来ないのです。
エラーの原因は相関名のスコープです。相関名というのは、I1 や I2 など、テーブルの別名としてつけた名前です。サブクエリ内部でつけられた相関名は、そのサブクエリ内でしか使用出来ません。I1 は外側でつけられた名前なので SELECT 文全体で使用出来ますが、I2 はサブクエリ内でつけられた名前なので、サブクエリの括弧内でしか使用は出来ません。
相関的に行ごとに値を移動させて、合致したものを返す。forみたい。