<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
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 ) ;
原理:
根據欄位對資料進行分組,查詢出所有分組的最小ID(即要保留的不重複資料)將查詢出來的資料(所有不重複的資料)存放到臨時表中從原來的表中刪除ID不在臨時表中的重複資料
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 ) ;
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 ) ;
準備的測試表結構及資料
插入的資料中A,B,E存在重複資料,C沒有重複記錄
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關鍵字篩選出表中重複資料
SELECT `name`,COUNT(1) FROM TAB GROUP BY `name` HAVING COUNT(1) >1
可以通過分組語句從每種重複資料中都拿出一條標識
SELECT `name`,id FROM TAB GROUP BY `name` HAVING COUNT(1) >1
刪除重複記錄並且只保留一條 [留意SQL註釋]
DELETE from tab where -- 刪除所有的重複時間 Begin -- `name` in ( SELECT * from (SELECT `name`FROM TAB GROUP BY `name` HAVING COUNT(1) >1) tmp2 ) -- 刪除所有的重複時間 END -- -- 但一些特定ID的記錄不進行刪除 Begin -- AND id NOT in( select id from ( SELECT `name`,id FROM TAB GROUP BY `name` HAVING COUNT(1) >1 ) tmp1 ) -- 但一些特定ID的記錄不進行刪除 END --
執行後最終結果
方法二
MySql如何刪除所有多餘的重複資料
方法一查詢出的所有多餘的重複記錄:
方法二查詢出的所有多餘的重複記錄(與方法一的結果相同):
方法三查詢出的所有多餘的重複記錄:這裡方法三因為用了MAX()方法(也可改用MIN()),查詢結果記錄的id不太一樣,但也可以被視為重複多餘的資料,關鍵是你希望選擇保留哪一條記錄而已。
出現重複的資料,如:
先用SELECT查詢看看結果:
-- 方法一 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 )
方法一查詢出的所有多餘的重複記錄:
-- 方法二 SELECT * FROM t_user WHERE id NOT IN ( SELECT MIN(id) FROM t_user GROUP BY user_name )
方法二查詢出的所有多餘的重複記錄(與方法一的結果相同):
-- 方法三 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 )
方法三查詢出的所有多餘的重複記錄:
這裡方法三因為用了MAX()方法(也可改用MIN()),查詢結果記錄的id不太一樣,但也可以被視為重複多餘的資料,關鍵是你希望選擇保留哪一條記錄而已。
下面是對上面的SELECT語句稍作修改並加入了DELETE
-- 方法一(笨方法但容易理解) DELETE FROM t_user WHERE user_name IN ( SELECT t1.user_name FROM ( -- 查詢出所有重複的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 ( -- 查詢出所有重複的記錄並各自只取其中一條(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 ( -- 過濾出重複多餘的資料,比如,如果所有記錄中存在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. 關於所有存在相同user_name的記錄,只查詢出(保留)重複記錄中的1條,假設這樣查詢出來的集合為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 )
最後刪除成功之後,顯示資料已經沒有重複的了
到此這篇關於Mysql 刪除重複資料保留一條有效資料的文章就介紹到這了,更多相關Mysql 刪除重複資料內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45