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

BiA*_*AiB 5 mysql sql

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

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,falseunknown.值与NULL的比较是未知的,如果那些NOT IN比较中的任何一个未知,那么结果也被认为是未知的.

  • @BiAiB 是的,你是对的.. 如果你说 X IN (S) 它与`X=s1 或 x=s1 或 ...` 相同 (2认同)