为什么此查询返回一个空集:
select p.iuser_id,p.produit_id from portefeuille p
WHERE produit_id=48
AND p.iuser_id NOT IN (NULL);
Run Code Online (Sandbox Code Playgroud)
而这一个:
select p.iuser_id,p.produit_id from portefeuille p
WHERE produit_id=48
LIMIT 5
Run Code Online (Sandbox Code Playgroud)
返回结果如
72968, 48
106967, 48
7381, 48
81678, 48
194250, 48
Run Code Online (Sandbox Code Playgroud)
并且这些值都不是NULL或应该等于NULL.(我为consiseness添加了限制5,我正在使用MySql 5.1)
编辑:这里我把问题缩小到NOT IN(NULL).原始查询有一个子查询,其中一些行包含NULL,如下所示:
WHERE user_id NOT IN( select user_id from mailsubscriptions )
Run Code Online (Sandbox Code Playgroud)
并且一些user_id为NULL,但集合中只有一个NULL会污染整个查询.
nvo*_*gel 13
x NOT IN(...)定义为x与子查询返回的每个值之间的一系列比较.SQL使用三值逻辑,逻辑表达式的三个可能值为true,false或unknown.值与NULL的比较是未知的,如果那些NOT IN比较中的任何一个未知,那么结果也被认为是未知的.