0
点赞
收藏
分享

微信扫一扫

mysql 删除表中多余的重复记录(多个字段),只留有id最小的记录


DELETE FROM 
	表1 f 
WHERE
 ( f.字段1,f.字段2 ) IN ( SELECT 字段1,字段2 FROM 表1 GROUP BY 字段1,字段2 HAVING count(*) > 1 )
 AND 
 id NOT IN ( SELECT min(id) FROM 表1 GROUP BY 字段1,字段2 HAVING count(*) > 1 )

按照上面这种模式编写sql;mysql可能出现一下错误

You can’t specify target table for update in FROM clause

这个错误的意思是不能在同一个sql语句中,先select同一个表的某些值,然后再update这个表。

把select在用括号包一层即可,例如

DELETE 
FROM
	custom_position_view 
WHERE
	( position_id, view_user_id ) IN ( SELECT position_id, view_user_id FROM ( ( SELECT position_id, view_user_id FROM custom_position_view GROUP BY position_id, view_user_id HAVING count(*) > 1 ) ) t ) 
	AND id NOT IN (
	SELECT tt.idx FROM ( SELECT min( id ) idx FROM custom_position_view GROUP BY position_id, view_user_id HAVING count(*) > 1 ) tt 
	)


举报

相关推荐

0 条评论