LoginSignup
2

More than 5 years have passed since last update.

相関サブクエリ

Posted at

「販売単価(sel_price)が、全体の平均の販売単価より高い商品」を選び出すには、スカラ・サブクエリを使えば実現出来ます。今度は少しこの条件を変えて「商品分類(category_id)ごとに平均販売単価より高い商品」を、商品分類のグループから選び出すことを考えてみましょう。

エラーになる理由は、前節でも述べたとおり、このサブクエリが複数行を返してしまい、スカラ・サブクエリにならないからです。WHERE 句でサブクエリを使用する場合は、必ず結果は 1 行である必要があります。
このような場合に使用するのが相関サブクエリです。相関サブクエリは、テーブル全体ではなく、テーブルの一部のレコード集合に限定した比較をしたい場合に使います。

WHERE I1.category_id = I2.category_id
上記が、相関サブクエリになる。

相関サブクエリの注意点

これは、サブクエリの中にあった条件を、外側に移動させただけで、その他は何の変更も加えていません。ところが、この SELECT 文はエラーになって正しく実行出来ないのです。
エラーの原因は相関名のスコープです。相関名というのは、I1 や I2 など、テーブルの別名としてつけた名前です。サブクエリ内部でつけられた相関名は、そのサブクエリ内でしか使用出来ません。I1 は外側でつけられた名前なので SELECT 文全体で使用出来ますが、I2 はサブクエリ内でつけられた名前なので、サブクエリの括弧内でしか使用は出来ません。

相関的に行ごとに値を移動させて、合致したものを返す。forみたい。

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2