MySQL 刪除重復數據
10余年的海東網站建設經驗,針對設計、前端、開發、售后、文案、推廣等六對一服務,響應快,48小時及時工作處理。成都全網營銷的優勢是能夠根據用戶設備顯示端的尺寸不同,自動調整海東建站的顯示方式,使網站能夠適用不同顯示終端,在瀏覽器中調整網站的寬度,無論在任何一種瀏覽器上瀏覽網站,都能展現優雅布局與設計,從而大程度地提升瀏覽體驗。創新互聯建站從事“海東網站設計”,“海東網站推廣”以來,每個客戶項目都認真落實執行。
有些 MySQL 數據表中可能存在重復的記錄,有些情況我們允許重復數據的存在,但有時候我們也需要刪除這些重復的數據。
本章節我們將為大家介紹如何防止數據表出現重復數據及如何刪除數據表中的重復數據。
刪除重復數據
如果你想刪除數據表中的重復數據,你可以使用以下的SQL語句:
from 樹懶學堂 - 一站式數據知識平臺
當然你也可以在數據表中添加 INDEX(索引) 和 PRIMAY KEY(主鍵)這種簡單的方法來刪除表中的重復記錄。方法如下:
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表。
利用group by
代碼如下:
SELECT * FROM(
select * from customer where user=(
SELECT source_user from customer WHERE user='admin') UNION ALL select * from customer where user=(
select source_user from customer where user=(
SELECT source_user from customer WHERE user='admin')) union ALL select * from customer where user=(
select source_user from customer where user=(
select source_user from customer where user=(
SELECT source_user from customer WHERE user='admin'))) UNION ALL select * from customer where source_user=(/*我的上線的上線的user*/
select user from customer where user=(
select source_user from customer where user=(
SELECT source_user from customer WHERE user='admin'))) union all select * from customer where source_user=(/*我的上線的上線的上線user*/
select user from customer where user=(
select source_user from customer where user=(
select source_user from customer where user=(
SELECT source_user from customer WHERE user='admin'))))) as alias group by user;
在使用 MySQL 時,有時需要查詢出某個字段不重復的記錄,這時可以使用mysql提供的distinct這個關鍵字來過濾重復的記錄,但是實際中我們往往用distinct來返回不重復字段的條數(count(distinct id)),其原因是distinct只能返回他的目標字段,而無法返回其他字段,例如有如下表user:
用distinct來返回不重復的用戶名:select distinct name from user;,結果為:
這樣只把不重復的用戶名查詢出來了,但是用戶的id,并沒有被查詢出來:select distinct name,id from user;,這樣的結果為:
distinct name,id 這樣的mysql 會認為要過濾掉name和id兩個字段都重復的記錄,如果sql這樣寫:select id,distinct name from user,這樣mysql會報錯,因為distinct必須放在要查詢字段的開頭。
所以一般distinct用來查詢不重復記錄的條數。
如果要查詢不重復的記錄,有時候可以用group by :
select id,name from user group by name;
b. 方法:
☆根據dname分組,查找出deptno最小的。然后再查找deptno不包含剛才查出來的。這樣就查詢出了所有的重復數據(除了deptno最小的那行)
方法2
刪除重復的行
單個字段的如果會了,多個字段也非常簡單。就是將group by 的字段增加為你想要的即可。
此處只寫一個,其他方法請仿照一個字段的寫即可。
查詢結果不含指定字段重復
2.表需要刪除重復的記錄(重復記錄保留1條),
3.查詢重復
4.1、查找表中多余的重復記錄,重復記錄是根據單個字段(peopleId)來判斷
4.2、刪除表中多余的重復記錄,重復記錄是根據單個字段(peopleId)來判斷,只留有rowid最小的記錄
4.3、查找表中多余的重復記錄(多個字段)
4.4、刪除表中多余的重復記錄(多個字段),只留有rowid最小的記錄
4.5、查找表中多余的重復記錄(多個字段),不包含rowid最小的記錄
4.6.消除一個字段的左邊的第一位:
4.7.消除一個字段的右邊的第一位:
4.8.假刪除表中多余的重復記錄(多個字段),不包含rowid最小的記錄
查詢重復