mysql怎么刪除重復(fù) mysql批量刪除重復(fù)數(shù)據(jù)

怎么刪除重復(fù)的Mysql數(shù)據(jù)?

MYSQL里有五百萬(wàn)數(shù)據(jù),但大多是重復(fù)的,真實(shí)的就180萬(wàn),于是想怎樣把這些重復(fù)的數(shù)據(jù)搞出來(lái),在網(wǎng)上找了一圈,好多是用NOT IN這樣的代碼,這樣效率很低,自己琢磨組合了一下,找到一個(gè)高效的處理方式,用這個(gè)方式,五百萬(wàn)數(shù)據(jù),十來(lái)分鐘就全部去除重復(fù)了,請(qǐng)各位參考。

網(wǎng)站建設(shè)哪家好,找創(chuàng)新互聯(lián)建站!專注于網(wǎng)頁(yè)設(shè)計(jì)、網(wǎng)站建設(shè)、微信開(kāi)發(fā)、小程序制作、集團(tuán)企業(yè)網(wǎng)站建設(shè)等服務(wù)項(xiàng)目。為回饋新老客戶創(chuàng)新互聯(lián)還提供了景洪免費(fèi)建站歡迎大家使用!

第一步:從500萬(wàn)數(shù)據(jù)表data_content_152里提取出不重復(fù)的字段SFZHM對(duì)應(yīng)的ID字段到TMP3表

1 create table tmp3 as select min(id) as col1 from data_content_152 group by SFZHM;

第二步:創(chuàng)建新表RES

1234 CREATE TABLE `res` (`id` int(11),`sfz` char(20)) ENGINE=MyISAM;

第三步:把TMP3表ID對(duì)應(yīng)到data_content_152里需要提取的數(shù)據(jù)添加到RES表的SFZ字段

1 INSERT INTO res (sfz) SELECT sfzhm FROM data_content_152,tmp3 where data_content_152.id=tmp3.col1

至此,就在MYSQL里實(shí)現(xiàn)了,給數(shù)據(jù)表data_content_152完全刪除重復(fù)數(shù)據(jù),把去重復(fù)后的數(shù)據(jù)導(dǎo)入到RES表。

Mysql去掉重復(fù)數(shù)據(jù)的做法:distinct , group by。以及數(shù)據(jù)庫(kù)的拓展

一張user表 中的name字段,里面有10個(gè)張三。我要只查詢出一個(gè)張三。

SQL: select distinct name from user

如果還要查詢出id

SQL: select distinct name,id from user

SQL :select name from user group by name

group by理解:表里的某一個(gè)字段(比如:name) 當(dāng)出現(xiàn)相同的數(shù)據(jù)時(shí),group by就將這2條數(shù)據(jù)合二為一。name就顯示一條 數(shù)據(jù)了。 但是name達(dá)到合二為一了,這2條數(shù)據(jù)的其他數(shù)據(jù)怎么辦呢? 這時(shí)候需要配合聚合函數(shù)的使用。

where條件:分組前的條件,配合任何關(guān)鍵字使用

Having 條件:分組后的條件 (事后條件) ,只配合group by使用。having條件通常使用聚合函數(shù)

SQL :select deptno,sum(sal) from emp group by deptno having sum(sal) 9000;

SQL: select deptno,count(*) from emp where sal 1000 group by deptno haing sum(sal) 8000

拓展:

聚合函數(shù)定義:聚合函數(shù)對(duì)一組值進(jìn)行計(jì)算并返回單一的值。(以下都屬于聚合函數(shù))

count(*) : 不包括空值。返回對(duì)行數(shù)目的計(jì)數(shù)。計(jì)算出有多少行,多少條數(shù)據(jù)。

count() : 包含空值。返回對(duì)數(shù)目的計(jì)數(shù)。計(jì)算表里有多少行,相當(dāng)于多少條數(shù)據(jù)。

sum() : 求和運(yùn)算

max(); 最大值

min(): 最小值

avg(): 平均值

mysql,sqlserver數(shù)據(jù)庫(kù)去重

b. 方法:

☆根據(jù)dname分組,查找出deptno最小的。然后再查找deptno不包含剛才查出來(lái)的。這樣就查詢出了所有的重復(fù)數(shù)據(jù)(除了deptno最小的那行)

方法2

刪除重復(fù)的行

單個(gè)字段的如果會(huì)了,多個(gè)字段也非常簡(jiǎn)單。就是將group by 的字段增加為你想要的即可。

此處只寫(xiě)一個(gè),其他方法請(qǐng)仿照一個(gè)字段的寫(xiě)即可。

查詢結(jié)果不含指定字段重復(fù)

2.表需要?jiǎng)h除重復(fù)的記錄(重復(fù)記錄保留1條),

3.查詢重復(fù)

4.1、查找表中多余的重復(fù)記錄,重復(fù)記錄是根據(jù)單個(gè)字段(peopleId)來(lái)判斷

4.2、刪除表中多余的重復(fù)記錄,重復(fù)記錄是根據(jù)單個(gè)字段(peopleId)來(lái)判斷,只留有rowid最小的記錄

4.3、查找表中多余的重復(fù)記錄(多個(gè)字段)

4.4、刪除表中多余的重復(fù)記錄(多個(gè)字段),只留有rowid最小的記錄

4.5、查找表中多余的重復(fù)記錄(多個(gè)字段),不包含rowid最小的記錄

4.6.消除一個(gè)字段的左邊的第一位:

4.7.消除一個(gè)字段的右邊的第一位:

4.8.假刪除表中多余的重復(fù)記錄(多個(gè)字段),不包含rowid最小的記錄

查詢重復(fù)

mysql怎么去除重復(fù)數(shù)據(jù)

MySQL 刪除重復(fù)數(shù)據(jù)

有些 MySQL 數(shù)據(jù)表中可能存在重復(fù)的記錄,有些情況我們?cè)试S重復(fù)數(shù)據(jù)的存在,但有時(shí)候我們也需要?jiǎng)h除這些重復(fù)的數(shù)據(jù)。

本章節(jié)我們將為大家介紹如何防止數(shù)據(jù)表出現(xiàn)重復(fù)數(shù)據(jù)及如何刪除數(shù)據(jù)表中的重復(fù)數(shù)據(jù)。

刪除重復(fù)數(shù)據(jù)

如果你想刪除數(shù)據(jù)表中的重復(fù)數(shù)據(jù),你可以使用以下的SQL語(yǔ)句:

from 樹(shù)懶學(xué)堂 - 一站式數(shù)據(jù)知識(shí)平臺(tái)

當(dāng)然你也可以在數(shù)據(jù)表中添加 INDEX(索引) 和 PRIMAY KEY(主鍵)這種簡(jiǎn)單的方法來(lái)刪除表中的重復(fù)記錄。方法如下:

mysql刪除重復(fù)數(shù)據(jù),保留一條

mysql數(shù)據(jù)表中有多條重復(fù)數(shù)據(jù)記錄,現(xiàn)在想刪除刪除部分重復(fù)數(shù)據(jù),保留最后一條更新或者插入的數(shù)據(jù)。

以學(xué)生表為例,我們創(chuàng)建一個(gè)簡(jiǎn)單的數(shù)據(jù)表來(lái)做實(shí)驗(yàn):

往表里面插入一些實(shí)驗(yàn)數(shù)據(jù):

我們可以根據(jù)分組查詢先將重復(fù)數(shù)據(jù)查詢出來(lái),同時(shí)也可以獲取到最后的更新時(shí)間,然后再與原表聯(lián)表查詢小于最大時(shí)間的數(shù)據(jù),將查詢出來(lái)的數(shù)據(jù)刪除。

------先來(lái)慢慢消化-------

在做刪除前,我們可以先看看有哪些數(shù)據(jù)是有重復(fù)的:

可以看到張三,李四,王五的數(shù)據(jù)是有重復(fù)的,趙六沒(méi)有重復(fù),下面我們查找最后更新的記錄。

可以看到,最后更新的數(shù)據(jù)為15:57:46的記錄沒(méi)有在結(jié)果中。

可以看到重復(fù)記錄已經(jīng)被清理掉。

假如有兩行記錄是完全一樣的,這個(gè)方法就不可行了,往表里面在跑一次數(shù)據(jù)插入:

執(zhí)行刪除計(jì)劃:

創(chuàng)建一個(gè)臨時(shí)表存放最后插入的一條數(shù)據(jù)(包含重復(fù)與沒(méi)有重復(fù)的),然后清空原表,再將臨時(shí)表的數(shù)據(jù)復(fù)制到原表中,最后把臨時(shí)表刪除。

這個(gè)很好理解,相當(dāng)于ctrl+c,ctrl+v的操作,數(shù)據(jù)表如下:

這樣數(shù)據(jù)去重就完成了,需要注意的是, 如果表數(shù)據(jù)量很大,注意在group by 里面的字段建立索引,同時(shí),生產(chǎn)環(huán)境注意好先進(jìn)行數(shù)據(jù)備份操作 。

標(biāo)題名稱:mysql怎么刪除重復(fù) mysql批量刪除重復(fù)數(shù)據(jù)
文章來(lái)源:http://muchs.cn/article34/docosse.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供品牌網(wǎng)站制作、企業(yè)網(wǎng)站制作、標(biāo)簽優(yōu)化、品牌網(wǎng)站設(shè)計(jì)全網(wǎng)營(yíng)銷推廣、營(yíng)銷型網(wǎng)站建設(shè)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

搜索引擎優(yōu)化