工作隨筆——mysql子查詢刪除原表資料

愛自己發表於2015-09-22

最近在開發的時候遇到一個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' ;

 

  

相關文章