MySQL消除重複行方法步驟
mysql
方法
步驟
本文主要介紹了MySQL 消除重複行的一些方法,需要的朋友可以參考下,希望能幫助到大家。
sql語句
/* MySQL 消除重复行的一些方法 ---Chu Minfei ---2010-08-12 22:49:44.660 --引用转载请注明出处:http://blog.csdn.NET/feixianxxx */ ----------------全部字段重复------------------------ --1使用表替换来删除重复项 create table test_1(id int,value int); insert test_1 select 1,2 union all select 1,2 union all select 2,3; --建立一个和源表结构一样的空的临时表 create table tmp like test_1; --向临时表插入不重复的记录 insert tmp select distinct * from test_1; --删除原表 drop table test_1; --更改临时表名为目标表 rename table tmp to test_1; --显示 mysql> select * from test_1; +------+-------+ | id | value | +------+-------+ | 1 | 2 | | 2 | 3 | +------+-------+ --2.添加auto_increment属性列(这个方法只能用于MyISAM或者BDB引擎的表) create table test_1(id int,value int) engine=MyISAM; insert test_1 select 1,2 union all select 1,2 union all select 2,3; alter table test_1 add id2 int not null auto_increment, add primary key(id,value,id2); select * from test_1; +----+-------+-----+ | id | value | id2 | +----+-------+-----+ | 1 | 2 | 1 | | 1 | 2 | 2 | | 2 | 3 | 1 | +----+-------+-----+ delete from test_1 where id2<>1; alter table test_1 drop id2; select * from test_1; +----+-------+ | id | value | +----+-------+ | 1 | 2 | | 2 | 3 | +----+-------+ -------------------部分字段重复--------------------- --1.加索引的方式 create table test_2(id int,value int); insert test_2 select 1,2 union all select 1,3 union all select 2,3; Alter IGNORE table test_2 add primary key(id); select * from test_2; +----+-------+ | id | value | +----+-------+ | 1 | 2 | | 2 | 3 | +----+-------+ 我们可以看到 1 3 这条记录消失了 我们这里也可以使用Unique约束 因为有可能列中有NULL值,但是这里NULL就可以多个了.. --2.联合表删除 create table test_2(id int,value int); insert test_2 select 1,2 union all select 1,3 union all select 2,3; delete A from test_2 a join (select MAX(value) as v ,ID from test_2 group by id) b on a.id=b.id and a.value<>b.v; select * from test_2; +------+-------+ | id | value | +------+-------+ | 1 | 3 | | 2 | 3 | +------+-------+ --3.使用Increment_auto也可以就是上面全部字段去重的第二个方法 --4.容易错误的方法 --有些朋友可能会想到子查询的方法,我们来试验一下 create table test_2(id int,value int); insert test_2 select 1,2 union all select 1,3 union all select 2,3; delete a from test_2 a where exists(select * from test_2 where a.id=id and a.value<value); /*ERROR 1093 (HY000): You can't specify target table 'a' for update in FROM clause*/ 目前,您不能从一个表中删除,同时又在子查询中从同一个表中选择。 ------------------删除特定重复行-------------- --主要通过order by +limit 或者直接limit create table test_3(id int,value int); insert test_3 select 1,2 union all select 1,3 union all select 1,4 union all select 2,3; --这是要保留ID=1 value最小的那个记录,删除其他id为的记录 delete from test_3 where id=1 order by value desc limit 2; select * from test_3; +------+-------+ | id | value | +------+-------+ | 1 | 2 | | 2 | 3 | +------+-------+ 如果你只想删除任意的记录 保留一条 就可以去掉order by
登入後複製
相關推薦:
#以上是MySQL消除重複行方法步驟的詳細內容。更多資訊請關注PHP中文網其他相關文章!
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章
R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
2 週前
By 尊渡假赌尊渡假赌尊渡假赌
倉庫:如何復興隊友
4 週前
By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒險:如何獲得巨型種子
3 週前
By 尊渡假赌尊渡假赌尊渡假赌
擊敗分裂小說需要多長時間?
3 週前
By DDD
R.E.P.O.保存文件位置:在哪里以及如何保護它?
3 週前
By DDD

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)