国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 數據庫 > MySQL > 正文

MySQL 消除重復行的一些方法

2024-07-24 13:13:24
字體:
來源:轉載
供稿:網友

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教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 新竹市| 七台河市| 南宁市| 凌源市| 宿州市| 丹凤县| 仁寿县| 庆云县| 浪卡子县| 青浦区| 新乡县| 大厂| 通化市| 定日县| 白银市| 保亭| 南木林县| 德阳市| 莒南县| 莱西市| 林甸县| 扎鲁特旗| 公主岭市| 满洲里市| 鞍山市| 梧州市| 建阳市| 揭西县| 上林县| 三穗县| 黄龙县| 梅州市| 南涧| 昌吉市| 东乡族自治县| 富平县| 黔南| 丽江市| 丰县| 信丰县| 镇平县|