【发布时间】:2015-07-16 10:57:52
【问题描述】:
我正在尝试选择在特定列中没有空值且其值不在另一个表中的所有记录。
因此,在这种特殊情况下,我想从导入表中获取尚未在个人表中的所有“讲师”。显然我不想要任何空白的导师。我第一次尝试在 where 子句中使用:
(Instructor IS NOT NULL OR Instructor <> '')
但是结果仍然包括所有空白记录。当我尝试使用
ISNULL(Instructor, '') <> ''
我得到了想要的结果。我看不出这两个 where 子句如何可能产生不同的结果。在我看来,将值转换为空字符串以进行比较的 ISNULL 似乎与将列与 null 然后再与空字符串进行比较的结果完全相同。我在这里想念什么?我猜这与空值的奇怪性有关。
以下是完整的查询
SELECT * FROM [tempimporttblTrainingLog]
LEFT JOIN tblIndividual I ON [Instructor] = I.FirstName + ' ' + I.Surname
WHERE (I.FirstName + ' ' + I.Surname IS NULL) AND (Instructor IS NOT NULL OR Instructor <> '')
SELECT * FROM [tempimporttblTrainingLog]
LEFT JOIN tblIndividual I ON [Instructor] = I.FirstName + ' ' + I.Surname
WHERE (I.FirstName + ' ' + I.Surname IS NULL) AND (ISNULL(Instructor, '') <> '')
【问题讨论】:
标签: tsql where-clause