SELECT * FROM your_table
WHERE id in (2,null)
等价于
SELECT * FROM your_table
WHERE id = 2 OR id IS NULL;
SELECT * FROM your_table
WHERE id not in (2,null)
等价于
SELECT * FROM your_table
WHERE id <> 2
and id <> NULL;
工作中(2,null)经常使用子查询的形式,对于优化热点问题,如果子查询中有空值,则返回空,数据不正确。
改写的方式为将子查询中的NULL剔除,单独拿出来处理。
SELECT * FROM your_table
WHERE id not in ( 2 )
and id is not NULL;
not in 使用BroadcastNestedLoopJoin,可以试试left anti join,效率会高很多