-1

以下语句不返回任何结果的任何原因?如果我省略了,where我会得到所有记录,并且可以清楚地看到VarcharFields 在许多情况下不匹配,而这些情况正是我要查找的情况。我尝试在 where 中交换 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比较有什么办法吗?

4

2 回答 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 演示

于 2013-10-24T15:47:28.927 回答
0

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

WHERE IsNULL(ACC.VarcharField, '') != IsNull(CON.VarcharField, '')
于 2013-10-24T15:52:49.650 回答