我尝试选择在特定列中没有空值的所有记录,并且它的值不在另一个表中。
所以这种特殊情况我希望得到所有教练'来自个人表中尚未包含的导入表。显然,我不想要任何空白的教练。我尝试在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, '') <> '')
答案 0 :(得分:1)
ISNULL(Instructor, '') <> '' (1)
相当于
(Instructor IS NOT NULL AND Instructor <> '') (2)
不是
(Instructor IS NOT NULL OR Instructor <> '') (3)
如果Instructor IS为NULL,则(1)和(2)将返回FALSE,当(3)返回TRUE时。 当Instructor =''时也是如此。
答案 1 :(得分:0)
ISNULL(Instructor, '') <> ''
不会返回空白记录,并且您有一个OR
(Instructor IS NOT NULL OR Instructor <> '')
line,意思是它会返回任何非null和非空格的东西,你的意思是改为放置AND
吗?