你要刪除重復(fù)項,最好能再設(shè)計一個字段,比如主鍵,一個表就一個字段,比較少見,查詢比較方便,直接使用dictinct,要刪除比較麻煩,所以建議再設(shè)計一個字段,就很少刪除重復(fù)記錄。

創(chuàng)新互聯(lián)專注于江蘇網(wǎng)站建設(shè)服務(wù)及定制,我們擁有豐富的企業(yè)做網(wǎng)站經(jīng)驗。 熱誠為您提供江蘇營銷型網(wǎng)站建設(shè),江蘇網(wǎng)站制作、江蘇網(wǎng)頁設(shè)計、江蘇網(wǎng)站官網(wǎng)定制、小程序設(shè)計服務(wù),打造江蘇網(wǎng)絡(luò)公司原創(chuàng)品牌,更為您提供江蘇網(wǎng)站排名全網(wǎng)營銷落地服務(wù)。
MySQL查詢重復(fù)字段,及刪除重復(fù)記錄的方法
數(shù)據(jù)庫中有個大表,需要查找其中的名字有重復(fù)的記錄id,以便比較。如果僅僅是查找數(shù)據(jù)庫中name不重復(fù)的字段,很容易:
SELECT min(`id`),`name` FROM `table` GROUP BY `name`;
但是這樣并不能得到說有重復(fù)字段的id值。(只得到了最小的一個id值)查詢哪些字段是重復(fù)的也容易:
SELECT `name`,count(`name`) as count FROM `table` GROUP BY `name` HAVING count(`name`) 1 ORDER BY count DESC;
但是要一次查詢到重復(fù)字段的id值,就必須使用子查詢了,于是使用下面的語句。
SELECT `id`,`name` FROM `table` WHERE `name` in (
SELECT `name`
FROM `table`
GROUP BY `name` HAVING count(`name`) 1);
但是這條語句在mysql中效率太差,感覺mysql并沒有為子查詢生成零時表。于是使用先建立零時表:
create table `tmptable` as (
SELECT `name`
FROM `table`
GROUP BY `name` HAVING count(`name`) 1);
保留第一條t1.idt2.id
保留最后一條t1.idt2.id
完畢
mysql數(shù)據(jù)表中有多條重復(fù)數(shù)據(jù)記錄,現(xiàn)在想刪除刪除部分重復(fù)數(shù)據(jù),保留最后一條更新或者插入的數(shù)據(jù)。
以學(xué)生表為例,我們創(chuàng)建一個簡單的數(shù)據(jù)表來做實驗:
往表里面插入一些實驗數(shù)據(jù):
我們可以根據(jù)分組查詢先將重復(fù)數(shù)據(jù)查詢出來,同時也可以獲取到最后的更新時間,然后再與原表聯(lián)表查詢小于最大時間的數(shù)據(jù),將查詢出來的數(shù)據(jù)刪除。
------先來慢慢消化-------
在做刪除前,我們可以先看看有哪些數(shù)據(jù)是有重復(fù)的:
可以看到張三,李四,王五的數(shù)據(jù)是有重復(fù)的,趙六沒有重復(fù),下面我們查找最后更新的記錄。
可以看到,最后更新的數(shù)據(jù)為15:57:46的記錄沒有在結(jié)果中。
可以看到重復(fù)記錄已經(jīng)被清理掉。
假如有兩行記錄是完全一樣的,這個方法就不可行了,往表里面在跑一次數(shù)據(jù)插入:
執(zhí)行刪除計劃:
創(chuàng)建一個臨時表存放最后插入的一條數(shù)據(jù)(包含重復(fù)與沒有重復(fù)的),然后清空原表,再將臨時表的數(shù)據(jù)復(fù)制到原表中,最后把臨時表刪除。
這個很好理解,相當(dāng)于ctrl+c,ctrl+v的操作,數(shù)據(jù)表如下:
這樣數(shù)據(jù)去重就完成了,需要注意的是, 如果表數(shù)據(jù)量很大,注意在group by 里面的字段建立索引,同時,生產(chǎn)環(huán)境注意好先進(jìn)行數(shù)據(jù)備份操作 。
MySQL 刪除重復(fù)數(shù)據(jù)
有些 MySQL 數(shù)據(jù)表中可能存在重復(fù)的記錄,有些情況我們允許重復(fù)數(shù)據(jù)的存在,但有時候我們也需要刪除這些重復(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語句:
from 樹懶學(xué)堂 - 一站式數(shù)據(jù)知識平臺
當(dāng)然你也可以在數(shù)據(jù)表中添加 INDEX(索引) 和 PRIMAY KEY(主鍵)這種簡單的方法來刪除表中的重復(fù)記錄。方法如下:
文章題目:mysql怎么消除重復(fù)項,mysql去除重復(fù)字段
分享地址:http://chinadenli.net/article8/hsheip.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供微信公眾號、關(guān)鍵詞優(yōu)化、標(biāo)簽優(yōu)化、用戶體驗、小程序開發(fā)、品牌網(wǎng)站建設(shè)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)