mysql根據多個字段內容刪除重復數據


 

 

 

 

 

MySQL根據多個字段刪除重復數據(保留一條)
在成千上萬條數據中,存在着一些相同的記錄,該如何用SQL語句來刪除掉重復的呢
話不多說直接上代碼

DELETE 
FROM
	表名 
WHERE
	S_ID IN (
	SELECT
		S_ID 
	FROM
		表名 A,
		( SELECT 字段 1, 字段 2 FROM 表名 GROUP BY 字段 1, 字段 2 HAVING COUNT(*) > 1 ) B 
	WHERE
		A.字段 1 = B.字段 1 
		AND A.字段 2 = B.字段 2 
	AND A.S_ID NOT IN ( SELECT MIN( S_ID ) AS ID FROM 表名 GROUP BY 字段 1, 字段 2, 字段 3 HAVING COUNT(*) > 1 ) 
	);

  //出現報錯 1093 - You can't specify target table 'student_info' for update in FROM clause   

意思很顯而易見了,說不能對進行查詢操作的表進行update操作,也就說我們的where條件中進行了子查詢,並且子查詢也是針對需要進行update操作的表的,mysql不支持這種查詢修改的方式。

解決方法

上網查了一下,針對這種問題可以通過”繞”的方式進行實現,下面看sql語句

DELETE 
FROM
	student_info 
WHERE
	student_id IN (
	select m.student_id from
	
	(SELECT
		student_id 
	FROM
		student_info A,
		( SELECT student_name,class_name,home_address FROM student_info GROUP BY student_name,class_name,home_address HAVING COUNT(*) > 1 ) B 
	WHERE
		A.student_name  = B.student_name  
		AND A.class_name  = B.class_name 
	  and A.home_address=B.home_address	
	AND A.student_id NOT IN ( SELECT MIN( student_id ) AS ID FROM student_info GROUP BY student_name,class_name,home_address HAVING COUNT(*) > 1 )) m
	)

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM