Where语句不正确

时间:2013-10-24 15:27:36

标签: sql sql-server-2008

以下声明没有返回任何结果的原因是什么?如果我遗漏了where我得到了所有记录,并且可以清楚地看到VarcharField在我试图找到的一些案例中不匹配。我已尝试在其中交换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

更新

问题是表格中的空值。任何方式围绕NULL比较?

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

为了与可能为NULL的字符串字段进行比较,我更喜欢IsNull()函数。小心。取决于您对“无价值”的定义,以及它们是否匹配。

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