数据库"not in"遇到的坑

问题场景

写一个简单的SQL来将两个表进行合并,但是需要将两个表相同的部分给排除了。所以使用not in来进行排除,可是没有达到效果。

问题SQL

Insert into A_TABLE (iId,iAreaId,sAreaCode,sProvinceName,sCityName,sTelAreaCode)
(select A.iId,A.iAreaId,A.sAreaCode,A.sProvinceName,A.sCityName,A.sTelAreaCode
from B_TABLE  A
where A.iId   not in (
    select  C.iId from A_TABLE B left join B_TABLE C 
    on B.iAreaId=C.iAreaId and B.sAreaCode=C.sAreaCode and B.sProvinceName=C.sProvinceName and B.sCityName=C.sCityName and B.sTelAreaCode=C.sTelAreaCode 
) )

问题原因

查找资料,最后在一篇研究数据库的博文里面看到,说not in后面的数据不能存在null,不然会返回空的。尝试性去试一下,没想到真的可以。

问题完善SQL

Insert into A_TABLE (iId,iAreaId,sAreaCode,sProvinceName,sCityName,sTelAreaCode)
(select A.iId,A.iAreaId,A.sAreaCode,A.sProvinceName,A.sCityName,A.sTelAreaCode
from B_TABLE  A
where A.iId   not in (
    select  C.iId from A_TABLE B left join B_TABLE C 
    on B.iAreaId=C.iAreaId and B.sAreaCode=C.sAreaCode and B.sProvinceName=C.sProvinceName and B.sCityName=C.sCityName and B.sTelAreaCode=C.sTelAreaCode 
    where C.iId is not null
) )

问题结果

顺利解决。

问题思考

在使用in或者not in的时候,要考虑去掉空值的情况。

你可能感兴趣的:(数据库学习,问题修复记录)