以下声明没有返回任何结果的原因是什么?如果我遗漏了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比较?
答案 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, '')