十年網(wǎng)站開發(fā)經(jīng)驗 + 多家企業(yè)客戶 + 靠譜的建站團隊
量身定制 + 運營維護+專業(yè)推廣+無憂售后,網(wǎng)站問題一站解決
你要刪除重復項,最好能再設計一個字段,比如主鍵,一個表就一個字段,比較少見,查詢比較方便,直接使用dictinct,要刪除比較麻煩,所以建議再設計一個字段,就很少刪除重復記錄。
創(chuàng)新互聯(lián)專注于江蘇網(wǎng)站建設服務及定制,我們擁有豐富的企業(yè)做網(wǎng)站經(jīng)驗。 熱誠為您提供江蘇營銷型網(wǎng)站建設,江蘇網(wǎng)站制作、江蘇網(wǎng)頁設計、江蘇網(wǎng)站官網(wǎng)定制、小程序設計服務,打造江蘇網(wǎng)絡公司原創(chuàng)品牌,更為您提供江蘇網(wǎng)站排名全網(wǎng)營銷落地服務。
MySQL查詢重復字段,及刪除重復記錄的方法
數(shù)據(jù)庫中有個大表,需要查找其中的名字有重復的記錄id,以便比較。如果僅僅是查找數(shù)據(jù)庫中name不重復的字段,很容易:
SELECT min(`id`),`name` FROM `table` GROUP BY `name`;
但是這樣并不能得到說有重復字段的id值。(只得到了最小的一個id值)查詢哪些字段是重復的也容易:
SELECT `name`,count(`name`) as count FROM `table` GROUP BY `name` HAVING count(`name`) 1 ORDER BY count DESC;
但是要一次查詢到重復字段的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ù)表中有多條重復數(shù)據(jù)記錄,現(xiàn)在想刪除刪除部分重復數(shù)據(jù),保留最后一條更新或者插入的數(shù)據(jù)。
以學生表為例,我們創(chuàng)建一個簡單的數(shù)據(jù)表來做實驗:
往表里面插入一些實驗數(shù)據(jù):
我們可以根據(jù)分組查詢先將重復數(shù)據(jù)查詢出來,同時也可以獲取到最后的更新時間,然后再與原表聯(lián)表查詢小于最大時間的數(shù)據(jù),將查詢出來的數(shù)據(jù)刪除。
------先來慢慢消化-------
在做刪除前,我們可以先看看有哪些數(shù)據(jù)是有重復的:
可以看到張三,李四,王五的數(shù)據(jù)是有重復的,趙六沒有重復,下面我們查找最后更新的記錄。
可以看到,最后更新的數(shù)據(jù)為15:57:46的記錄沒有在結果中。
可以看到重復記錄已經(jīng)被清理掉。
假如有兩行記錄是完全一樣的,這個方法就不可行了,往表里面在跑一次數(shù)據(jù)插入:
執(zhí)行刪除計劃:
創(chuàng)建一個臨時表存放最后插入的一條數(shù)據(jù)(包含重復與沒有重復的),然后清空原表,再將臨時表的數(shù)據(jù)復制到原表中,最后把臨時表刪除。
這個很好理解,相當于ctrl+c,ctrl+v的操作,數(shù)據(jù)表如下:
這樣數(shù)據(jù)去重就完成了,需要注意的是, 如果表數(shù)據(jù)量很大,注意在group by 里面的字段建立索引,同時,生產(chǎn)環(huán)境注意好先進行數(shù)據(jù)備份操作 。
MySQL 刪除重復數(shù)據(jù)
有些 MySQL 數(shù)據(jù)表中可能存在重復的記錄,有些情況我們允許重復數(shù)據(jù)的存在,但有時候我們也需要刪除這些重復的數(shù)據(jù)。
本章節(jié)我們將為大家介紹如何防止數(shù)據(jù)表出現(xiàn)重復數(shù)據(jù)及如何刪除數(shù)據(jù)表中的重復數(shù)據(jù)。
刪除重復數(shù)據(jù)
如果你想刪除數(shù)據(jù)表中的重復數(shù)據(jù),你可以使用以下的SQL語句:
from 樹懶學堂 - 一站式數(shù)據(jù)知識平臺
當然你也可以在數(shù)據(jù)表中添加 INDEX(索引) 和 PRIMAY KEY(主鍵)這種簡單的方法來刪除表中的重復記錄。方法如下: