この質問にはさまざまなバリエーションがありますが、null 値の比較について尋ねると、それらはすべてパフォーマンスとインデックスについて話しているようです。
私の問題は、日付パラメーターに基づいて比較している null を返すことができるネストされた SELECT があることです。
SELECT a.*
FROM Table_One a,
Table_Two b
WHERE a.Fieldc IN (SELECT CompareValue from Table_Three cv WHERE inDate between cv.Date_ and SYSDATE)
AND a.Fielda = b.Fieldb(+)
ここでネストされた選択が null を返すと、左の結合が台無しになるようです。
必要に応じて、いくつかの偽のデータを喜んで含めますが、何かが足りないだけかもしれません。私が発生する必要があるのは、Fieldc 比較がその日付指定内でのみ発生することです。
洞察をありがとう。ありがとう。
さらに詳しい情報:
Table_One データ: すべてのフィールドは varchar2 です
Fielda | Fieldb | Fieldc|
'aVal' | 'bVal' | 'cVal'|
'dVal' | 'eVal | 'fVal'|
'dVal' | 'fVal | 'eVal'|
Table_Two データ: すべてのフィールドは varchar2 です
Fielda | Fieldb | Fieldc|
'aVal' | 'bVal' | 'cVal'|
'dVal' | 'fVal | 'gVal'|
'dVal' | 'fVal | 'cVal'|
Table_Three データ: CompareValue は varchar2、date_ は日付
CompareValue | date_ |
'fval' | 2012-09-10 |
したがって、パラメーターが今日の場合、select は 'fval' を返し、正しく結合されたままになります。ただし、日付パラメーターが '2012-09-10' より前の場合、ネストされた選択は null を比較し、左結合は正しく行われません。これは、元のバージョンを少し簡略化したものです。
ありがとう