Mysql?刪除重復(fù)數(shù)據(jù)保留一條有效數(shù)據(jù)(最新推薦)
Mysql 刪除重復(fù)數(shù)據(jù)保留一條有效數(shù)據(jù)
一、Mysql 刪除重復(fù)數(shù)據(jù),保留一條有效數(shù)據(jù)
DELETE FROM SZ_Building WHERE id NOT IN ( SELECT t.min_id FROM ( SELECT MIN(id) AS min_id FROM SZ_Building GROUP BY BLDG_NO ) t ) ;
原理:
根據(jù)字段對(duì)數(shù)據(jù)進(jìn)行分組,查詢出所有分組的最小ID(即要保留的不重復(fù)數(shù)據(jù))將查詢出來的數(shù)據(jù)(所有不重復(fù)的數(shù)據(jù))存放到臨時(shí)表中從原來的表中刪除ID不在臨時(shí)表中的重復(fù)數(shù)據(jù)
二、Mysql 刪除重復(fù)數(shù)據(jù)(多個(gè)字段分組)
DELETE FROM SZ_Water_Level WHERE id NOT IN ( SELECT t.min_id FROM ( SELECT MIN(id) AS min_id FROM SZ_Water_Level GROUP BY CZBM,SJ,SW ) t ) ;
三、Mysql 查詢出可以刪除的重復(fù)數(shù)據(jù)
SELECT * FROM SZ_Building WHERE BLDG_NO IN ( SELECT BLDG_NO FROM SZ_Building GROUP BY BLDG_NO HAVING COUNT(1)>1 ) AND id NOT IN ( SELECT MIN(id) FROM SZ_Building GROUP BY BLDG_NO HAVING COUNT(1)>1 ) ;
補(bǔ)充:mysql刪除重復(fù)記錄并且只保留一條
準(zhǔn)備的測(cè)試表結(jié)構(gòu)及數(shù)據(jù)
插入的數(shù)據(jù)中A,B,E存在重復(fù)數(shù)據(jù),C沒有重復(fù)記錄
CREATE TABLE `tab` ( ? `id` int(11) NOT NULL AUTO_INCREMENT, ? `name` varchar(20) DEFAULT NULL, ? PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=13 DEFAULT CHARSET=utf8; ? -- ---------------------------- -- Records of tab -- ---------------------------- INSERT INTO `tab` VALUES ('1', 'A'); INSERT INTO `tab` VALUES ('2', 'A'); INSERT INTO `tab` VALUES ('3', 'A'); INSERT INTO `tab` VALUES ('4', 'B'); INSERT INTO `tab` VALUES ('5', 'B'); INSERT INTO `tab` VALUES ('6', 'C'); INSERT INTO `tab` VALUES ('7', 'B'); INSERT INTO `tab` VALUES ('8', 'B'); INSERT INTO `tab` VALUES ('9', 'B'); INSERT INTO `tab` VALUES ('10', 'E'); INSERT INTO `tab` VALUES ('11', 'E'); INSERT INTO `tab` VALUES ('12', 'E');
使用HAVING關(guān)鍵字篩選出表中重復(fù)數(shù)據(jù)
SELECT `name`,COUNT(1) FROM TAB GROUP BY `name` HAVING COUNT(1) >1
可以通過分組語句從每種重復(fù)數(shù)據(jù)中都拿出一條標(biāo)識(shí)
SELECT `name`,id? FROM TAB GROUP BY `name`? HAVING COUNT(1) >1
刪除重復(fù)記錄并且只保留一條 [留意SQL注釋]
DELETE from tab where -- 刪除所有的重復(fù)時(shí)間 Begin -- `name` in ( ?? ?SELECT * from (SELECT `name`FROM TAB GROUP BY `name`? HAVING COUNT(1) >1) tmp2 ) -- 刪除所有的重復(fù)時(shí)間 END -- -- 但一些特定ID的記錄不進(jìn)行刪除? Begin -- AND id NOT in( ?? ?select id from ( ?? ??? ?SELECT `name`,id? FROM TAB GROUP BY `name` HAVING COUNT(1) >1 ?? ?) tmp1 ) -- 但一些特定ID的記錄不進(jìn)行刪除? END --
執(zhí)行后最終結(jié)果
方法二
MySql如何刪除所有多余的重復(fù)數(shù)據(jù)
方法一查詢出的所有多余的重復(fù)記錄:
方法二查詢出的所有多余的重復(fù)記錄(與方法一的結(jié)果相同):
方法三查詢出的所有多余的重復(fù)記錄:這里方法三因?yàn)橛昧薓AX()方法(也可改用MIN()),查詢結(jié)果記錄的id不太一樣,但也可以被視為重復(fù)多余的數(shù)據(jù),關(guān)鍵是你希望選擇保留哪一條記錄而已。
MySql如何刪除所有多余的重復(fù)數(shù)據(jù) 需要處理的數(shù)據(jù),如:
出現(xiàn)重復(fù)的數(shù)據(jù),如:
先用SELECT查詢看看結(jié)果:
-- 方法一 SELECT * FROM t_user WHERE user_name IN ( ?? ?SELECT user_name FROM t_user GROUP BY user_name HAVING COUNT(1)>1 )? AND id NOT IN ( ?? ?SELECT MIN(id) FROM t_user GROUP BY user_name HAVING COUNT(1)>1 )
方法一查詢出的所有多余的重復(fù)記錄:
-- 方法二 SELECT * FROM t_user WHERE id NOT IN ( SELECT MIN(id) FROM t_user GROUP BY user_name )
方法二查詢出的所有多余的重復(fù)記錄(與方法一的結(jié)果相同):
-- 方法三 SELECT * FROM t_user AS t1 WHERE t1.id <> ( SELECT MAX(t2.id) FROM t_user AS t2 WHERE t1.user_name=t2.user_name )
方法三查詢出的所有多余的重復(fù)記錄:
這里方法三因?yàn)橛昧薓AX()方法(也可改用MIN()),查詢結(jié)果記錄的id不太一樣,但也可以被視為重復(fù)多余的數(shù)據(jù),關(guān)鍵是你希望選擇保留哪一條記錄而已。
下面是對(duì)上面的SELECT語句稍作修改并加入了DELETE
-- 方法一(笨方法但容易理解) DELETE FROM t_user WHERE user_name IN ( SELECT t1.user_name FROM ( -- 查詢出所有重復(fù)的user_name SELECT user_name FROM t_user GROUP BY user_name HAVING COUNT(1)>1 ) t1 ) AND id NOT IN ( SELECT t2.min_id FROM ( -- 查詢出所有重復(fù)的記錄并各自只取其中一條(MIN(id)或MAX(id)都可以) SELECT MIN(id) AS min_id FROM t_user GROUP BY user_name HAVING COUNT(1)>1 ) t2 ) -- 方法二(推薦方法也容易理解) DELETE FROM t_user WHERE id NOT IN ( SELECT t.min_id FROM ( -- 過濾出重復(fù)多余的數(shù)據(jù),比如,如果所有記錄中存在1條記錄是user_name=zhangsan的,那么就取出它; -- 如果所有記錄中存在多條記錄是user_name=lisi的,那么只取其中1條,其他的不查詢出來 SELECT MIN(id) AS min_id FROM t_user GROUP BY user_name ) t ) -- 方法三(推薦方法但不太容易理解) DELETE FROM t_user WHERE id IN ( SELECT t.id FROM ( -- 1. 關(guān)于所有存在相同user_name的記錄,只查詢出(保留)重復(fù)記錄中的1條,假設(shè)這樣查詢出來的集合為A集合。 -- 2. 在所有記錄中,只要id不在A集合中的,都把它們查詢出來 SELECT t1.id FROM t_user AS t1 WHERE t1.id <> (SELECT MAX(t2.id) FROM t_user AS t2 WHERE t1.user_name=t2.user_name) ) t ) -- 或 DELETE FROM t_user t1 WHERE t1.id <> ( SELECT t2.max_id FROM ( SELECT MAX(t3.id) AS max_id FROM t_user t3 WHERE t1.user_name=t3.user_name ) t2 )
最后刪除成功之后,顯示數(shù)據(jù)已經(jīng)沒有重復(fù)的了
到此這篇關(guān)于Mysql 刪除重復(fù)數(shù)據(jù)保留一條有效數(shù)據(jù)的文章就介紹到這了,更多相關(guān)Mysql 刪除重復(fù)數(shù)據(jù)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- MySQL數(shù)據(jù)庫(kù)中刪除重復(fù)記錄的方法總結(jié)[推薦]
- sqlserver中重復(fù)數(shù)據(jù)值只取一條的sql語句
- sql刪除重復(fù)數(shù)據(jù)的詳細(xì)方法
- mysql查找刪除重復(fù)數(shù)據(jù)并只保留一條實(shí)例詳解
- MySQL根據(jù)某一個(gè)或者多個(gè)字段查找重復(fù)數(shù)據(jù)的sql語句
- mysql數(shù)據(jù)庫(kù)刪除重復(fù)數(shù)據(jù)只保留一條方法實(shí)例
- oracle/mysql數(shù)據(jù)庫(kù)多條重復(fù)數(shù)據(jù)如何取最新的
相關(guān)文章
MySQL定時(shí)任務(wù)EVENT事件的使用方法
本文主要介紹了MySQL定時(shí)任務(wù)EVENT事件的使用方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-05-05win10 下安裝mysql服務(wù)器社區(qū)版本mysql 5.7.22 winx64的圖文教程
這篇文章主要介紹了win10 下安裝mysql服務(wù)器社區(qū)版本mysql 5.7.22 winx64的圖文教程,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2018-05-05MySQL?varchar(n)能存儲(chǔ)幾個(gè)漢字
這篇文章主要介紹了MySQL varchar(n)能存儲(chǔ)幾個(gè)漢字,MySQL中varchar(n)表示n個(gè)字符,無論漢字和英文,Mysql都能存入n個(gè)字符,僅是實(shí)際字節(jié)長(zhǎng)度有所區(qū)別,本文給大家介紹的非常詳細(xì),需要的朋友可以參考下2023-05-05MySQL?InnoDB?存儲(chǔ)引擎的底層邏輯架構(gòu)
這篇文章主要為大家介紹了MySQL?InnoDB?存儲(chǔ)引擎的底層邏輯架構(gòu)詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-09-09MySQL觸發(fā)器基本用法詳解【創(chuàng)建、查看、刪除等】
這篇文章主要介紹了MySQL觸發(fā)器基本用法,結(jié)合實(shí)例形式分析了mysql觸發(fā)器的基本創(chuàng)建、查看、刪除等相關(guān)使用方法與注意事項(xiàng),需要的朋友可以參考下2020-05-05MySQL定時(shí)器開啟、調(diào)用實(shí)現(xiàn)代碼
有些新手朋友對(duì)MySQL定時(shí)器開啟、調(diào)用不是很熟悉,本人整理測(cè)試一些,拿出來和大家分享一下,希望可以幫助你們2012-12-12Windows環(huán)境下MySQL 8.0 的安裝、配置與卸載
這篇文章主要介紹了Windows環(huán)境下MySQL 8.0 的安裝、配置與卸載步驟,本文分步驟給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-09-09如何解決Mysql報(bào)錯(cuò)Deadlock found when trying to
這篇文章主要介紹了如何解決Mysql報(bào)錯(cuò)Deadlock found when trying to get lock;try restarting transaction問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-05-05