Я вижу несколько вариантов этого вопроса, но все они, кажется, говорят о производительности и индексах, когда спрашивают о сравнении нулевых значений.
Моя проблема в том, что у меня есть вложенный SELECT, который может возвращать значение null, с которым я сравниваю на основе параметра даты.
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 Data: все поля varchar2
Fielda | Fieldb | Fieldc|
'aVal' | 'bVal' | 'cVal'|
'dVal' | 'eVal | 'fVal'|
'dVal' | 'fVal | 'eVal'|
Table_Two Data: все поля varchar2
Fielda | Fieldb | Fieldc|
'aVal' | 'bVal' | 'cVal'|
'dVal' | 'fVal | 'gVal'|
'dVal' | 'fVal | 'cVal'|
Table_Three Data: CompareValue — это varchar2, date_ — это дата
CompareValue | date_ |
'fval' | 2012-09-10 |
Итак, если параметр был сегодня, выбор возвращает «fval», и мы правильно получаем левое соединение. однако, когда параметр даты находится перед «2012-09-10», тогда вложенный выбор сравнивает значение null, и левое соединение не происходит должным образом. Это немного упрощенная версия оригинала.
Спасибо
(+)
для внешних соединений. Используйте правильный синтаксисLEFT JOIN
. - person a_horse_with_no_name   schedule 12.09.2012