Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/csharp-4.0/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
NULL的SQLite处理_Sqlite_Null - Fatal编程技术网

NULL的SQLite处理

NULL的SQLite处理,sqlite,null,Sqlite,Null,我有一个SQL查询,比如 SELECT * FROM tableName WHERE colName != 'contents' 现在,与我所期望的相反,这似乎与内容为“NULL”的colName不匹配。查看并明确说明此条件“null或true”对于SqlLite为true我认为我的查询足以为colName选择具有null的行。我一定理解错了。有人能帮我解释一下吗?我可以用 SELECT * FROM tableName WHERE (colName != 'contents' OR colN

我有一个SQL查询,比如

SELECT * FROM tableName WHERE colName != 'contents'
现在,与我所期望的相反,这似乎与内容为“NULL”的colName不匹配。查看并明确说明此条件
“null或true”对于SqlLite为true
我认为我的查询足以为
colName
选择具有
null
的行。我一定理解错了。有人能帮我解释一下吗?我可以用

SELECT * FROM tableName WHERE (colName != 'contents' OR colName IS NULL)
但我不认为我必须这么做


谢谢

您可以使用
而不是
来绕过这个问题=。如果你看一下,你会看到:

“是”和“不是”操作符的工作方式类似于=和!=除非一个或两个操作数都为空。在这种情况下,如果两个操作数都为NULL,则IS运算符的计算结果为1(true),而IS NOT运算符的计算结果为0(false)。如果一个操作数为NULL,另一个为非NULL,则is运算符的计算结果为0(false),而is not运算符的计算结果为1(true)is或not表达式的计算结果不可能为NULL。运算符is和is的优先级与=

我自己做了测试:

sqlite> create table temp( dataColumn, nullColumn );
sqlite> insert into temp( dataColumn, nullColumn ) values ( 'test', NULL );
sqlite> select * from temp where nullColumn != 'test';
sqlite> select * from temp where nullColumn IS NOT 'test';
test|
sqlite> select * from temp where dataColumn IS NOT 'test';
sqlite>
从更多的游戏来看,似乎
=运算符与
NULL
进行比较时,它的计算结果将为
NULL

sqlite> select ( 'contents' != NULL );

sqlite> select ( 'contents' == NULL );

sqlite> select ( 'contents' IS NULL );
0
sqlite> select ( 'contents' IS NOT NULL );
1

大概这就是为什么你没有得到你期望的行为——你实际上是在说
WHERE NULL!='内容“
,其计算结果为NULL,并且不满足WHERE子句

+1。我认为没有什么东西可以添加到该答案中,使其更好。