1. 程式人生 > 其它 >Mysql刪除表中重複資料

Mysql刪除表中重複資料

技術標籤:javaMysqljavamysql


--------文章內容為個人理解,歡迎交流--------


一張表中有重複資料,需要刪除重複的資料,只保留(最大/最小)一條。

例:

現有A表:
id:主鍵(唯一)
b:資料(有重複)
在這裡插入圖片描述

需求:

刪除表中重複的資料,保留相同資料中id最小的資料。

效果:

在這裡插入圖片描述

sql

思路:先查詢出去重過後的id(可用分組),再刪除其它id的資料

DELETE FROM A WHERE	id NOT IN ( SELECT id FROM ( SELECT	min(id) AS id FROM A GROUP BY b ) C );
sql解釋
DELETE
FROM
	A	# 表A
WHERE
	id NOT IN ( # 需要刪除資料的id,不包含下面查詢出來的id
		SELECT	# 此條SELECT查詢不可省,否則報錯:You can't specify target table 'A' for update in FROM clause。
				# 內層SELECT分組後,再次查詢C表獲得id
			id
		FROM
			(
				SELECT
					min(id) AS id	# 保留相同資料中,id最小的資料。AS不可省,命名別名為id。
									# 若省略,執行2個SELECT報錯:Unknown column 'id' in 'field list'。
									# 整體語句執行不會報錯,但無效果。
				FROM
					A
				GROUP BY
					b
			) C	  # 此處的C,不可省。分組後的資料,生成表C,外層SELECT查詢C表,獲取最終的id
	);