ばかげた質問の時間。Oracle10g。
where句が結合に影響を与える可能性はありますか?
次の形式のクエリがあります。
select * from
(select product, product_name from products p
join product_serial ps on product.id = ps.id
join product_data pd on pd.product_value = to_number(p.product_value)) product_result
where product_name like '%prototype%';
明らかに、これは不自然な例です。テーブル構造はすべて架空のものであるため、実際に表示する必要はありません。残念ながら、実際のテーブル構造やクエリを表示することはできません。この場合、p.product_valueはVARCHAR2フィールドであり、特定の行にはテキストではなくIDが格納されています。(はい、悪いデザインですが、私が継承したもので、変更できません)
問題は参加にあります。where句を省略すると、クエリが機能し、行が返されます。ただし、where句を追加すると、pd.product_value = to_number(p.product_value)結合条件で「無効な番号」エラーが発生します。
明らかに、「無効な番号」エラーは、p.product_valueフィールドに数字以外の行が含まれている行が結合されたときに発生します。しかし、私の質問は、それらの行がどのように選択されているかということです。結合がouterwhere句なしで成功した場合、outer where句は結合の結果から行を選択するだけではいけませんか?結合が内部クエリにあるにもかかわらず、where句が結合される行に影響を与えているようです。
私の質問は理にかなっていますか?