求大牛解析下:数据差异原因

hanks_gao 2013-07-22 01:40:42
各位大侠:
我想将table_A中的旧数据通过中间表table_middle的筛选,将符合条件的迁移到table_A_Backup中,并从table_A中删除,语句如下:

INSERT INTO table_A_Backup(
SELECT * FROM table_A src
WHERE EXISTS (SELECT 0 FROM table_middle md WHERE 1=1 AND src.column_a = md.column_a)
)
);

DELETE FROM table_A
WHERE EXISTS (SELECT 0 FROM table_middle md WHERE 1=1 AND src.column_a = md.column_a);

等执行完上面的SQL之后,再查询table_A中的数据笔数和table_A_backup中的数据笔数,发现他们两个的加总比总的资料笔数少了一些(假定table_A 的资料不再变化):
select count(0) from table_A;
select count(0) from table_A_Backup;

请各位大侠帮忙分析下是什么原因导致这样的数据差异?
非常感谢!

...全文
171 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
hanks_gao 2013-07-25
  • 打赏
  • 举报
回复
引用 3 楼 renkuan719 的回复:
先查询出要插入的结果,插入一条记录,同时删除这条记录。。。
感谢回复,不过不是我想要的答案!
shy315 2013-07-23
  • 打赏
  • 举报
回复
SELECT count(*) FROM table_A src
        WHERE EXISTS (SELECT 0 FROM table_middle md WHERE 1=1 AND src.column_a = md.column_a)
    )
用几个count(*)确认记录数是否一致
槑党--一缕风 2013-07-23
  • 打赏
  • 举报
回复
先查询出要插入的结果,插入一条记录,同时删除这条记录。。。
hanks_gao 2013-07-23
  • 打赏
  • 举报
回复
有做这方面的检查,我用SQL%ROWCOUNT记录insert的数量,然后在Delete之前计算要Delete的数量,如果不匹配,就Rollback,但是结果还是有差异,不知道什么原因!请大家给出一些认为可能会出问题的点在哪里?感谢了!!!

17,086

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧