本周在做ETL的时候踩了个小坑
A表中数据有18条,有字段UserID
B表与A表结构相同,但只有16条数据(手动删除2条,更改2条UserID为不重复的其他值)
当
Select UserID from B where UserID in (Select UserID from A)
时,查到12条数据(预想为14条)
当
Select UserID from B where UserID not in (Select UserID from A)
时,查到2条数据(预想为2条)
当
Select UserID from B where UserID exsit (Select UserID from A)
时,查到14条数据
经查询,发现表中有2条数据UserID字段为null。
翻阅资料发现,无论in和not in,null都不成立,而exsit会成立
in的处理方式是:首先查询子查询内容,然后与主查询做笛卡尔积;
exsit的处理方式是:首先查询主查询,然后遍历每一条结果是否符合子查询要求,符合则返回true并保存结果,否则返回false不保存结果