2013-10-24 5 views
-1

Любая причина, по которой приведенный ниже оператор не возвращает никаких результатов? Если я оставлю where, я получу все записи и могу ясно видеть, что VarcharField s не совпадают в ряде случаев, которые я пытаюсь найти. Я попытался обменять ACC и CON на то, где, а также использовать <> вместо !=.Неправильная информация о местоположении

SELECT Con.VarcharField, ACC.VarcharField 
FROM  
dbo.Contact AS CON 
INNER JOIN Account as ACC ON ACC.AccountId = CON.ContactID 
WHERE ACC.VarcharField != CON.VarcharField 

UPDATE

Проблема заключается до нулевых значений в таблице. В любом случае сравнение NULL?

+0

Вы проверили типы данных? –

+0

Есть несколько примеров данных для этого? – DrCopyPaste

+2

Мы не можем видеть ваши данные. Вам нужно будет предоставить структуры таблиц (являются ли они таблицами или представлениями, являются ли они одним и тем же типом данных, одинаковой сортировкой и т. Д.?) И, по крайней мере, одну примерную строку (включая конечные пробелы), которая, по вашему мнению, должна соответствовать вашему ГДЕ но не делает этого. Мы хорошие, но мы не так хороши. –

ответ

3

Вы можете проверить, есть ли обе стороны NULL, а другая нет.

SELECT Con.VarcharField, ACC.VarcharField 
FROM  
dbo.Contact AS CON 
INNER JOIN Account as ACC ON ACC.AccountId = CON.ContactID 
WHERE (ACC.VarcharField IS NULL AND CON.VarcharField IS NOT NULL) 
    OR (ACC.VarcharField IS NOT NULL AND CON.VarcharField IS NULL) 
    OR ACC.VarcharField != CON.VarcharField 

SQLFiddle DEMO

0

Для сравнения с строковых полей, которые могут быть NULL, я предпочитаю функцию IsNull(). Осторожный. В зависимости от вашего определения «нет значения» и должны ли они совпадать или не совпадать.

WHERE IsNULL(ACC.VarcharField, '') != IsNull(CON.VarcharField, '') 
+2

Это не обязательно работает, если столбец может содержать пустую строку. –

+0

Он работает нормально, если пустая строка и NULL означают одно и то же. Если этого не произойдет, вам нужно найти другое нейтральное значение для NULL. В таких случаях я иногда использую «NULL» или «****». Пока это значение, которое не имеет смысла в контексте. – Bill

+1

Если пустая строка и NULL означают одно и то же (они редко делают), то один или другой не должен быть разрешен. –

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