2015-05-01 2 views
-1

У меня есть запрос, который объединяет три таблицы и возвращает вычисление с псевдонимом в качестве конечного поля. Часто это значение равно null, когда в поле, к которому было присоединено, есть нуль. Соединение работает хорошо.Использование WHERE IS NULL возвращает все значения

Я хочу вернуть только записи, где я получаю Nulls в своем расчетном поле.

Но если добавить

WHERE field_name IS NULL 

до конца я нет записей

Если добавить

WHERE field_name IS NOT NULL 

я получаю весь набор, который я могу видеть несколько записей, как на самом деле null

Любое объяснение причин и того, как это исправить?

Редактировать: Я нашел решение для своего дела. Имя поля было псевдонимом для вычисления выше. Когда я дублировал вычисление в предложении where, вместо того, чтобы помещать псевдоним, он работал правильно.

+6

Вы уверены, что они являются фактическими 'NULL' в отличие от строки '' NULL''? Возможно, вам придется больше показать запрос. –

+1

Я думаю, нам было бы полезно увидеть соединение и выражение, которое вы вычисляете. – shawnt00

+2

Ох. Просто мысль - вы что-то делаете в своем предложении SELECT по строкам 'a * b * field_value * c как field_value', т. Е. Создаете псевдоним, соответствующий существующему имени столбца? Потому что, если это так, имейте в виду, что 'WHERE' работает * перед *' SELECT', и поэтому он будет фильтровать * column *, а не вычисленное значение. –

ответ

0

Я нашел решение для моего случая. Имя поля было псевдонимом для вычисления выше. Когда я дублировал вычисление в предложении where, вместо того, чтобы помещать псевдоним, он работал правильно.

0

Учитывая внешнее соединение:

select * 
from table1 
left join table2 on table2.table1_id = table1.id 

способ применить is null фильтр к присоединяемой таблице, чтобы поместить его в условии соединения:

select * 
from table1 
left join table2 on table2.table1_id = table1.id 
    and table2.col1 is null 

и НЕ:

select * 
from table1 
left join table2 on table2.table1_id = table1.id 
where table2.col1 is null 

Потому что, если соединение промахивается, все столбцы s в присоединяемой таблицы равны нулю, поэтому использование is null в where возвращает все строки присоединяемой к строке, которая имела нуль и все строки, которые не присоединиться. \

Смежные вопросы