您的位置:首页 > 数据库 > MySQL

工作随笔——mysql子查询删除原表数据

2016-07-29 00:00 603 查看
最近在开发的时候遇到一个mysql的子查询删除原表数据的问题。在网上也看了很多方法,基本也是然并卵(不是写的太乱就是效率太慢)。

公司DBA给了一个很好的解决方案,让人耳目一新。

DELETE fb.* FROM froadbill.bill fb LEFT JOIN froadbill.refundinfo br ON br.billSeqNo = fb.seq_no WHERE br.billSeqNo IS NULL AND fb.create_time >='20150102000000'  AND fb.create_time <'20150302000000' ;


froadbill.bill是账单表(约1kw数据),froadbill.refundinfo是退款表(约10w数据)。这条sql是要删除账单表20150102-20150302并且不在退款表的数据。这种写法避免了在sql中使用in或者not in这种低效的语句。

数据插入也可以使用这种写法:

INSERT INTO froadbill.bill_history SELECT DISTINCT fb.* FROM froadbill.bill fb LEFT JOIN froadbill.refundinfo br ON br.billSeqNo = fb.seq_no WHERE br.billSeqNo IS NULL AND fb.create_time >='20150102000000'  AND fb.create_time <'20150302000000' ;


  
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: