mysql查询条件not in 和 in的区别及原因
先写一个SQL
SELECT DISTINCT from_id
FROM cod
WHERE cod.from_id NOT IN (37, 56, 57)
今天在写SQL的时候,发现这个查的结果不全,少了NULL值的情况,not in 的时候竟然把null也排除了
用 in 的时候却没有包含null
感觉是mysql设计的不合理
因为一直认为in 和 not in 正好应该互补才是,就像这样查的应该是全部的一样:
SELECT DISTINCT from_id
FROM cod
WHERE cod.from_id NOT IN (37, 56, 57) or cod.from_id IN (37, 56, 57)
结果正如猜测的那样,少了个null
后来上网上查了下,有一个解释挺合理的,即:
null与任何值比较都是false
比如from_id有(37, 56, 57,28,null), not in (37, 56, 57)与28比较时是true,所以结果集中出现28,
null与not in (37, 56, 57)这个条件比较时,结果false,所以不出现在结果集中
so