not in 按你的说法一定为true,建议你拿你实例中的一条数据测试,没什么意外的话就是你说认为的一定它不一定。不过你这语句写的确实太冗余了...
知道语句是不好的,这是去年写好的,不想改了。只是纳闷这个情况怎么会出现,会不会表数据量大了会出现,现在200多万条了,我测试过,确实一个swbID也不存在的
@付鹏DragonDeal(龙易): 你这样 先执行下面那条语句,看看结果集,确定下是有结果集 插不进去,还是没结果集,分开解决问题,你这样就判断加上这条语句就插不进去,太武断了
@风醉: 我当时测过了,下面部分加上那个条件,是查不出记录来的,不加那个框框的条件确实是有记录的。
接着我在SynchronizeInOutStore中查询swbID,大致是这样查的:
select * from V_WayBill_SubWayBill where wbID = 444 and swbID in
(
select sios_swbID from SynchronizeInOutStore
)
却一条也查不出,也就是SynchronizeInOutStore表中不存在对应的swbID。
纳闷
@付鹏DragonDeal(龙易):
那你的意思 是
select * from sios_swbID from SynchronizeInOutStore where sios_swbID in(
select swbID from V_WayBill_SubWayBill where wbID = 444) 是有记录的了....
@风醉: 你弄反了,你这个查询 我们没必要
@付鹏DragonDeal(龙易): 你为了确认里面有没有数据,这个查询很有必要
觉得是 select sios_swbID from SynchronizeInOutStore 中, sios_swbid 有null 值的存在,not in 返回值有可能是
unknown, 你可以在语句中加上 select sios_swbID from SynchronizeInOutStore where sios_swbid is not null 再试
试。
建议:
1)尽量不要在where条件上做这种计算,性能较差。可以用join改写下。
2)可以考虑使用CTE,再插入。