问题场景
写一个简单的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
的时候,要考虑去掉空值的情况。