给出以下表格和数据
CREATE TABLE #temps
(
id int,
name varchar(max)
)
INSERT INTO #temps VALUES (1, 'foo')
INSERT INTO #temps VALUES (2, '')
INSERT INTO #temps VALUES (3, NULL)
我想选择foo
列中没有name
的所有行。
SELECT * FROM #temps
WHERE name <> 'foo'
DROP TABLE #temps
为什么这只返回#2行?第3行中的名称不是foo
,应该返回。
答案 0 :(得分:5)
为什么这只返回#2行?该 第3行中的名称不是foo而应该 被退回。
其他人已经回答了该怎么做。至于为何如此,null
表示未知值。第3行中的列name
的值可能为foo
。我们不知道因为价值未知。
where
子句必须评估为true
才能返回一行。 name <> 'foo'
不是true
,而false
不是{1}}。
答案 1 :(得分:4)
您需要where Name <> 'foo' or Name is null
。
无法比较Null是否相等。
答案 2 :(得分:4)
我的解决方案是
SELECT * FROM #temps
WHERE ISNULL(name, '') <> 'foo'