mysql删除完全重复数据库_MySQL中删除完全重复数据的准确SQL语句
案例:
id姓名課程名稱分數1張三數學692李四數學893張三數學69刪除除了自動編號不同,其他都相同的學生冗余信息
------------------------------------------------------------------------------------------------------
按常理來說,這個sql語句應該是:
delete tablename whereidnot in(select min(id) from tablename group byname,kecheng,fenshu);
這種寫法在sqlserver或者Oracle中是支持的,但是MySQL目前是不支持的,會報類似錯:You can't specify target table 'tablename' for update ,這是因為在mysql中不能同時查詢一個表的數據再同時進行刪除.
目前網上流行的一種解法是:
1)創建一個臨時表,講要查詢的列的存入臨時表中
create table temp as select ...
2)在temp表和原始表中進行操作
delete from tablename
3)drop temp...
但是這種做法,不僅浪費空間資源,同時也缺乏友好性。通過觀察我們發現這類查詢要解決的是如何將子查詢中的表與主查詢中的表區分開來,因此我們可以考慮用別名的方法,將子查詢的結果放到一個別名中。
完整的sql語句如下:
DELETE FROM tablename?where id not in (select?bid?from (select?min(id) as bid?from tablename?group by name,kecheng,fenshu) as b ) ;
解釋:
select?bid?from (select?min(id) as bid?from tablename?group by name,kecheng,fenshu) as b
這個子查詢的目的是從b中列出講篩選結果,即bid的集合。
(select?min(id) as bid?from tablename?group by name,kecheng,fenshu) as b
將分組結果中的最小的bid當做一個心的集合當做一個心的子表b,
注意mid(id)一定要有一個別名,這里取的是bid,作為b的一個列名,因為在上一級查詢中要用到這個列名(紅色標注)。
總結
以上是生活随笔為你收集整理的mysql删除完全重复数据库_MySQL中删除完全重复数据的准确SQL语句的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: vivo锁屏密码怎么设置
- 下一篇: centos rpm安装mysql5.5