最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Mysql?刪除重復(fù)數(shù)據(jù)保留一條有效數(shù)據(jù)(最新推薦)

 更新時間:2023年02月06日 08:27:47   作者:蕃薯耀  
這篇文章主要介紹了Mysql?刪除重復(fù)數(shù)據(jù)保留一條有效數(shù)據(jù),實現(xiàn)原理也很簡單,mysql刪除重復(fù)數(shù)據(jù),多個字段分組操作,結(jié)合實例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下

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ù)字段對數(shù)據(jù)進(jìn)行分組,查詢出所有分組的最小ID(即要保留的不重復(fù)數(shù)據(jù))將查詢出來的數(shù)據(jù)(所有不重復(fù)的數(shù)據(jù))存放到臨時表中從原來的表中刪除ID不在臨時表中的重復(fù)數(shù)據(jù)

二、Mysql 刪除重復(fù)數(shù)據(jù)(多個字段分組)

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
)
;

補充:mysql刪除重復(fù)記錄并且只保留一條

準(zhǔn)備的測試表結(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)識

SELECT `name`,id? FROM TAB GROUP BY `name`? HAVING COUNT(1) >1

刪除重復(fù)記錄并且只保留一條 [留意SQL注釋] 

DELETE from tab where
-- 刪除所有的重復(fù)時間 Begin --
`name` in (
?? ?SELECT * from (SELECT `name`FROM TAB GROUP BY `name`? HAVING COUNT(1) >1) tmp2
)
-- 刪除所有的重復(fù)時間 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ù)記錄:這里方法三因為用了MAX()方法(也可改用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ù)記錄:

在這里插入圖片描述

這里方法三因為用了MAX()方法(也可改用MIN()),查詢結(jié)果記錄的id不太一樣,但也可以被視為重復(fù)多余的數(shù)據(jù),關(guān)鍵是你希望選擇保留哪一條記錄而已。

下面是對上面的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)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Spark SQL常見4種數(shù)據(jù)源詳解

    Spark SQL常見4種數(shù)據(jù)源詳解

    這篇文章主要介紹了Spark SQL常見4種數(shù)據(jù)源(詳細(xì)),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,,需要的朋友可以參考下
    2019-06-06
  • 用shell寫一個mysql數(shù)據(jù)備份腳本

    用shell寫一個mysql數(shù)據(jù)備份腳本

    本篇文章教給大家用shell寫一個mysql數(shù)據(jù)備份腳本,這是一個簡單備份MYSQL數(shù)據(jù)庫的方法,一起跟著學(xué)習(xí)下吧。
    2017-12-12
  • mysql update case 更新字段值不固定的操作

    mysql update case 更新字段值不固定的操作

    這篇文章主要介紹了mysql update case 更新字段值不固定的操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-02-02
  • MySQL可直接使用的查詢表的列信息(實現(xiàn)方案)

    MySQL可直接使用的查詢表的列信息(實現(xiàn)方案)

    本文介紹了如何使用SQL快速將下劃線命名的表字段轉(zhuǎn)換為駝峰命名格式,包括確定下劃線位置、找到第一個字符、截取并拼接字符串等步驟,通過使用LOCATE、CONCAT、UCASE和LOWER等函數(shù),可以實現(xiàn)高效的字段命名轉(zhuǎn)換,感興趣的朋友跟隨小編一起看看吧
    2025-01-01
  • Mysql prepare預(yù)處理的具體使用

    Mysql prepare預(yù)處理的具體使用

    本文主要介紹了Mysql prepare預(yù)處理,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-09-09
  • zabbix監(jiān)控MySQL主從狀態(tài)的方法詳解

    zabbix監(jiān)控MySQL主從狀態(tài)的方法詳解

    這篇文章主要介紹了zabbix--監(jiān)控MySQL主從狀態(tài)的方法,本文圖文并茂給大家介紹的非常詳細(xì),具有一定的參考借鑒價值 ,需要的朋友可以參考下
    2019-06-06
  • MySQL中復(fù)制數(shù)據(jù)表中的數(shù)據(jù)到新表中的操作教程

    MySQL中復(fù)制數(shù)據(jù)表中的數(shù)據(jù)到新表中的操作教程

    這篇文章主要介紹了MySQL中復(fù)制數(shù)據(jù)表中的數(shù)據(jù)到新表中的操作教程,文中分為新表存在和新表不存在兩種情況來講,需要的朋友可以參考下
    2016-03-03
  • MySQL中JOIN連接的基本用法實例

    MySQL中JOIN連接的基本用法實例

    大家對join應(yīng)該都不會陌生,join可以將兩個表連接起來,下面這篇文章主要給大家介紹了關(guān)于MySQL中JOIN連接用法的相關(guān)資料,文中通過實例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-06-06
  • 詳解SparkSql輸出數(shù)據(jù)的方式

    詳解SparkSql輸出數(shù)據(jù)的方式

    在處理數(shù)據(jù)時,SparkSql提供了多種數(shù)據(jù)輸出方式,包括普通文件輸出、保存到數(shù)據(jù)庫和保存到Hive,普通文件輸出支持追加模式、覆寫模式、報錯模式和忽略模式,本文介紹SparkSql輸出數(shù)據(jù)的方式,感興趣的朋友一起看看吧
    2024-11-11
  • MySql實現(xiàn)分布式鎖的示例代碼

    MySql實現(xiàn)分布式鎖的示例代碼

    本文主要介紹了使用MySQL實現(xiàn)分布式鎖,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2024-12-12

最新評論

钦州市| 河源市| 怀仁县| 红原县| 阿鲁科尔沁旗| 枣强县| 平和县| 南和县| 综艺| 镇康县| 贡嘎县| 鄂尔多斯市| 星子县| 团风县| 新密市| 高邮市| 余干县| 孟村| 陆河县| 郯城县| 郓城县| 锡林郭勒盟| 定州市| 家居| 铁力市| 岳池县| 张家界市| 年辖:市辖区| 马尔康县| 长春市| 肃北| 常熟市| 中西区| 寻甸| 阿荣旗| 疏勒县| 青岛市| 定兴县| 湖北省| 加查县| 乾安县|