小编典典

AND字段NOT IN(NULL)返回空集

sql

为什么此查询返回一个空集:

select p.iuser_id,p.produit_id from portefeuille p
WHERE produit_id=48
AND p.iuser_id NOT IN (NULL);

而这个:

select p.iuser_id,p.produit_id from portefeuille p
WHERE produit_id=48
LIMIT 5

返回类似的结果

72968, 48
106967, 48
7381, 48
81678, 48
194250, 48

并且这些值都不为NULL或应等于NULL。(为了简洁起见,我添加了限制5,并且我正在使用MySql 5.1)


编辑:在这里,我将问题缩小为NOT IN(NULL)。原始查询有一个子查询,其中某些行包含NULL,例如:

WHERE user_id NOT IN( select user_id from mailsubscriptions )

和一些user_id为NULL,但集合中只有一个NULL会污染整个查询。


阅读 176

收藏
2021-03-23

共1个答案

小编典典

x NOT IN(…)定义为x与子查询返回的每个值之间的一系列比较。SQL使用三值逻辑,逻辑表达式的三个可能值是 truefalse 或_unknown_ 。值与NULL的比较是 未知的, 并且如果那些NOT IN比较中的任何一个是 未知的, 那么结果也将被视为 未知

2021-03-23