mysql删除完全重复数据库_MySQL中删除完全重复数据的准确SQL语句
案例:
id姓名課程名稱分?jǐn)?shù)1張三數(shù)學(xué)692李四數(shù)學(xué)893張三數(shù)學(xué)69刪除除了自動(dòng)編號(hào)不同,其他都相同的學(xué)生冗余信息
------------------------------------------------------------------------------------------------------
按常理來說,這個(gè)sql語(yǔ)句應(yīng)該是:
delete tablename whereidnot in(select min(id) from tablename group byname,kecheng,fenshu);
這種寫法在sqlserver或者Oracle中是支持的,但是MySQL目前是不支持的,會(huì)報(bào)類似錯(cuò):You can't specify target table 'tablename' for update ,這是因?yàn)樵趍ysql中不能同時(shí)查詢一個(gè)表的數(shù)據(jù)再同時(shí)進(jìn)行刪除.
目前網(wǎng)上流行的一種解法是:
1)創(chuàng)建一個(gè)臨時(shí)表,講要查詢的列的存入臨時(shí)表中
create table temp as select ...
2)在temp表和原始表中進(jìn)行操作
delete from tablename
3)drop temp...
但是這種做法,不僅浪費(fèi)空間資源,同時(shí)也缺乏友好性。通過觀察我們發(fā)現(xiàn)這類查詢要解決的是如何將子查詢中的表與主查詢中的表區(qū)分開來,因此我們可以考慮用別名的方法,將子查詢的結(jié)果放到一個(gè)別名中。
完整的sql語(yǔ)句如下:
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
這個(gè)子查詢的目的是從b中列出講篩選結(jié)果,即bid的集合。
(select?min(id) as bid?from tablename?group by name,kecheng,fenshu) as b
將分組結(jié)果中的最小的bid當(dāng)做一個(gè)心的集合當(dāng)做一個(gè)心的子表b,
注意mid(id)一定要有一個(gè)別名,這里取的是bid,作為b的一個(gè)列名,因?yàn)樵谏弦患?jí)查詢中要用到這個(gè)列名(紅色標(biāo)注)。
總結(jié)
以上是生活随笔為你收集整理的mysql删除完全重复数据库_MySQL中删除完全重复数据的准确SQL语句的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: vivo锁屏密码怎么设置
- 下一篇: 财经自媒体怎么申请?