为什么此查询返回一个空集:
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会污染整个查询。
x NOT IN(…)定义为x与子查询返回的每个值之间的一系列比较。SQL使用三值逻辑,逻辑表达式的三个可能值是 true , false 或_unknown_ 。值与NULL的比较是 未知的, 并且如果那些NOT IN比较中的任何一个是 未知的, 那么结果也将被视为 未知 。