Skip to Main Content

Japanese

Announcement

For appeals, questions and feedback about Oracle Forums, please email oracle-forums-moderators_us@oracle.com. Technical questions should be asked in the appropriate category. Thank you!

SQL テーブルのWHERE句における結合条件とSELECT句のデータに対する処理の順番について

937925May 17 2012 — edited May 24 2012
初歩的な質問で申し訳ありません。

DB : Oracle9i Enterprise Edition 9.2

前提:以下のようなテーブルを結合しで他を取得していました。

テーブルA(商品マスタ) 項目:商品コード、商品名

商品CD |商品名
-------------------
001 |自動車
002 |カメラ

テーブルB(商品明細) 項目:商品コード、入庫日、出庫日

商品CD |注文年月
-------------------
001 |201201
002 |-

この状態で、以下のようなクエリを書きました。

select a.商品CD
,a.商品名
,add_months(b.注文年月 || '01') 注文翌月
from テーブルA a
,テーブルB b
where a.商品CD = b.商品CD
and a.商品CD = '001'

商品CD 001 は入庫日・出庫日に日付を入れるが、
商品CD 002 は日付を入れないため、除外しています。

WHERE句で対象データを絞っているため、商品CD:001についてのみ注文年月翌月が取得されていたのですが、
あるタイミングからWHERE句より先に注文翌月算出の処理が先に走り、日付変換エラーとなりました。
再度アナライズを掛けたことで動きは基に戻りましたので、
アクセスパスが変わったことにより、テーブルA→テーブルBではなく、テーブルB→テーブルAという順番に処理されたようなのですが、SELECT句とWHERE句では必ずしもWHERE句が優先するわけではないということでしょうか。

例えば、以下のようにテーブルAがあり、

テーブルC

商品CD |商品名 |注文年月
----------------------------------------------
001 |自動車 |201201
002 |カメラ |-

以下のようなクエリを書いた場合でも、SELECT句の処理が優先されて日付変換エラーが発生することはあるでしょうか。

select c.商品CD
,c.商品名
,add_months(c.注文年月 || '01') 注文翌月
from テーブルC c
where c.商品CD = '001'
This post has been answered by ora10053 on May 20 2012
Jump to Answer
Comments
Locked Post
New comments cannot be posted to this locked post.
Post Details
Locked on Jun 21 2012
Added on May 17 2012
2 comments
1,912 views