本文目錄一覽:
- 1、mysql怎麼去除重複數據
- 2、mysql 現在表中出現重複數據,怎樣刪除重複數據
- 3、mysql 多個表重複的數據怎麼刪除
- 4、mysql資料庫怎麼去除重複數據
- 5、怎麼刪除重複的Mysql數據?
- 6、mysql如何去除兩個欄位數據相同的記錄
mysql怎麼去除重複數據
MySQL 刪除重複數據
有些 MySQL 數據表中可能存在重複的記錄,有些情況我們允許重複數據的存在,但有時候我們也需要刪除這些重複的數據。
本章節我們將為大家介紹如何防止數據表出現重複數據及如何刪除數據表中的重複數據。
刪除重複數據
如果你想刪除數據表中的重複數據,你可以使用以下的SQL語句:
from 樹懶學堂 – 一站式數據知識平台
當然你也可以在數據表中添加 INDEX(索引) 和 PRIMAY KEY(主鍵)這種簡單的方法來刪除表中的重複記錄。方法如下:
mysql 現在表中出現重複數據,怎樣刪除重複數據
這個需要分情況。1,你的資料庫表中有主鍵,且主鍵上面的數據為唯一值。也就是沒有重複值。那麼你在刪除的時候,將這個唯一值作為條件進行刪除。如: delete from [表名] where id=12.所有的數據相同,那麼你只能打開數據表,手工選定其中某一條,進行刪除。
mysql 多個表重複的數據怎麼刪除
通常情況下,一個我們在做一個產品的時候,一開始可能由於設計考慮不周或者程序寫的不夠嚴謹,某個欄位上的值產生重複了,但是又必須去掉,這個時候就稍微麻煩了一點,直接加一個 UNIQUE KEY 肯定是不行了,因為會報錯。
現在,我們來採用一種變通的辦法,不過可能會丟失一些數據 :)
在這裡,我們設定一個表,其結構如下:
mysql desc `user`;
+——-+——————+——+—–+———+—————-+
| Field | Type | Null | Key | Default | Extra |
+——-+——————+——+—–+———+—————-+
| id | int(10) unsigned | NO | PRI | NULL | auto_increment |
| name | char(10) | NO | | | |
| extra | char(10) | NO | | | |
+——-+——————+——+—–+———+—————-+
原來表中的數據假定有以下幾條:
mysql SELECT * FROM `user`;
+—-+——-+——–+
| id | name | extra |
+—-+——-+——–+
| 1 | user1 | user1 |
| 2 | user2 | user2 |
| 3 | user3 | user3 |
| 4 | user4 | user4 |
| 5 | user5 | user5 |
| 6 | user3 | user6 |
| 7 | user6 | user7 |
| 8 | user2 | user8 |
| 9 | USER2 | user9 |
| 10 | USER6 | user10 |
+—-+——-+——–+
1、將原來的數據導出
mysqlSELECT * INTO OUTFILE ‘/tmp/user.txt’ FROM `user`;
2、清空數據表
mysqlTRUNCATE TABLE `user`;
3、創建唯一索引,並且修改 `name` 欄位的類型為 BINARY CHAR 區分大小寫
mysql ALTER TABLE `user` MODIFY `name` CHAR(10) BINARY NOT NULL DEFAULT ”;
mysql ALTER TABLE `user` ADD UNIQUE KEY ( `name` );
現在來看看新的表結構:
mysql desc user;
+——-+——————+——+—–+———+—————-+
| Field | Type | Null | Key | Default | Extra |
+——-+——————+——+—–+———+—————-+
| id | int(10) unsigned | NO | PRI | NULL | auto_increment |
| name | char(10) | NO | UNI | | |
| extra | char(10) | NO | | | |
+——-+——————+——+—–+———+—————-+
4、把數據導回去,在這裡,有兩種選擇:新的重複記錄替換舊的記錄,只保留最新的記錄 或者是 新的記錄略過,只保留最舊的記錄
mysql LOAD DATA INFILE ‘/tmp/user.txt’ REPLACE INTO TABLE `user`;
Query OK, 10 rows affected (0.00 sec)
Records: 8 Deleted: 2 Skipped: 0 Warnings: 0
mysql SELECT * FROM USER;
+—-+——-+——–+
| id | name | extra |
+—-+——-+——–+
| 1 | user1 | user1 |
| 8 | user2 | user8 |
| 6 | user3 | user6 |
| 4 | user4 | user4 |
| 5 | user5 | user5 |
| 7 | user6 | user7 |
| 9 | USER2 | user9 |
| 10 | USER6 | user10 |
+—-+——-+——–+
上面是採用 REPLACE 的方式,可以看到,導入過程中刪掉了兩條數據,結果驗證確實是 新的重複記錄替換舊的記錄,只保留最新的記錄。
現在,來看看用 IGNORE 的方式:
mysql LOAD DATA INFILE ‘/tmp/user.txt’ IGNORE INTO TABLE `user`;
Query OK, 6 rows affected (0.01 sec)
Records: 8 Deleted: 0 Skipped: 2 Warnings: 0
mysql SELECT * FROM USER;
+—-+——-+——–+
| id | name | extra |
+—-+——-+——–+
| 1 | user1 | user1 |
| 2 | user2 | user2 |
| 3 | user3 | user3 |
| 4 | user4 | user4 |
| 5 | user5 | user5 |
| 7 | user6 | user7 |
| 9 | USER2 | user9 |
| 10 | USER6 | user10 |
+—-+——-+——–+
看到了吧,確實是 新的記錄略過,只保留最舊的記錄。
mysql資料庫怎麼去除重複數據
delete from zhszty_ebook
where id not in(
select * from (select max(id) from zhszty_ebook group by url
) as tmp);————mysql有個特性,對於表進行修改,刪除操作,子查詢不能和外層的查詢的表一樣,所以在加個select就可以了。其他資料庫按照樓上的那個是沒問題的
怎麼刪除重複的Mysql數據?
MYSQL里有五百萬數據,但大多是重複的,真實的就180萬,於是想怎樣把這些重複的數據搞出來,在網上找了一圈,好多是用NOT IN這樣的代碼,這樣效率很低,自己琢磨組合了一下,找到一個高效的處理方式,用這個方式,五百萬數據,十來分鐘就全部去除重複了,請各位參考。
第一步:從500萬數據表data_content_152里提取出不重複的欄位SFZHM對應的ID欄位到TMP3表
1 create table tmp3 as select min(id) as col1 from data_content_152 group by SFZHM;
第二步:創建新表RES
1234 CREATE TABLE `res` (`id` int(11),`sfz` char(20)) ENGINE=MyISAM;
第三步:把TMP3表ID對應到data_content_152里需要提取的數據添加到RES表的SFZ欄位
1 INSERT INTO res (sfz) SELECT sfzhm FROM data_content_152,tmp3 where data_content_152.id=tmp3.col1
至此,就在MYSQL里實現了,給數據表data_content_152完全刪除重複數據,把去重複後的數據導入到RES表。
mysql如何去除兩個欄位數據相同的記錄
方法有很多,這裡介紹兩種
方法一、
如果要保留id的最小值,例如:
數據:
執行sql:select count(*) as count ,name,id from ceshi group by name
amp;lt;img
最後要刪除的sql為:delete from ceshi where id not in (select count(*) as count ,name,id from ceshi group by name)
如果想保留id的最大值:
簡單的辦法是:delete from ceshi where id not in (select count(*) as count ,name,id from (select * from ceshi order by id desc) group by name)
如果想要刪除的是兩個列裡面對應相同的數據,也就是說表裡面有兩條記錄的name都是admin,要是只想保留其中一條的話,order by 的時候增加一個值即可,例如:
delete from ceshi where id not in (select count(*) as count ,name,id from ceshi group by name,email)
方法二、
只需要把你這張表當成兩張表來處理就行了。
DELETE p1 from TABLE p1, TABLE p2 WHERE p1.name = p2.name AND p1.email = p2.email AND p1.id p2.id;
這裡有個問題,保留最新的那一條(也就是ID最小的那個)
上面的的語句,p1.id p2.id,所以獲取到的是id最大的,因為p1.id小於p2.id就會被刪除,只有最大的值不滿足。如果要獲取id最小的那個,只需要把”改成”即可。
當然是用group by,count可以更精準控制重複n次的情況。
原創文章,作者:YDBSM,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/329520.html