以下两者之间有区别吗
选择。。。。其中id不在(。。。一些值…)
和
选择。。。。在(。。。一些值…)
如果id有空值,那么第一个就有问题。在这种情况下,结果集中不考虑具有空值的行,但如果考虑了:
SELECT ... WHERE id is NULL
我得到了一个非空的结果集。为什么会这样?这个答案取决于数据库引擎吗?
查询如下:
select id, name from mytable where id not IN ('1', '2','3','4', '5', '6', '7') limit 10;
id | name
--------+---------+--------+--------+---------
(0 rows)
select id, name from mytable where id is null limit 10;
....
(10 rows)
在这种情况下,id列的可能值是'1',…,'7',空
2条答案
按热度按时间sqougxex1#
是的,你很难理解。因为它不遵循布尔逻辑。一种看待它的方式是它说“我不知道”(或者在某些情况下“我不在乎”)。因此,要回答您的问题,“is null element of a list like('1','2','3')?”答案为null,如果您将问题修改为“is null element not of a list like('1','2','3')?”答案仍然为null。它包含所有布尔运算符和大多数字符串运算符(参见fiddle)。最安全的过程,直到你习惯了它,当你怀疑测试它,但不要让结果让你惊讶。
ve7v8dk22#
两者完全相等。如果有任何值是
NULL
.如果
NOT IN
列表是NULL
,那么NOT IN
返回或FALSE
(如果值在列表中)或NULL
.另一方面,如果列表中的任何值
NULL
,那么IN
返回或TRUE
或者NULL
. 那很好。否定会产生TRUE
或者NULL
.