在这里插入图片描述
1、查询(字段1, 字段2, 字段3)全部重复相同的数据

SELECT * 
FROM 表 
WHERE (字段1, 字段2, 字段3) IN (SELECT 字段1, 字段2, 字段3 FROM 表
GROUP BY 字段1, 字段2, 字段3 HAVING COUNT(*) > 1) 
ORDER BY 排序字段

在这里插入图片描述

2、过滤(字段1, 字段2, 字段3)全部重复相同的数据,只显示一条(id最小或最大等)数据
注:(1)包含原本不重复的数据(建议使用)

SELECT * 
FROM 表 
WHERE id
IN (SELECT MIN(id) FROM 表 GROUP BY 字段1, 字段2, 字段3)

在这里插入图片描述
注:(2)不包含原本不重复的数据

SELECT id, 字段1, 字段2, 字段3 
FROM 表 
WHERE id
IN (SELECT MIN(id) FROM 表 GROUP BY 字段1, 字段2, 字段3 HAVING COUNT(*) > 1)

在这里插入图片描述
3、删除(字段1, 字段2, 字段3)全部重复相同的数据,只保留一条(id最小或最大等)数据

DELETE FROM 表
WHERE id IN(SELECT id FROM (SELECT id FROM 表 WHERE 某某条件
AND (字段1, 字段2, 字段3) IN (
	SELECT 字段1, 字段2, 字段3
	FROM 表 GROUP BY 字段1, 字段2, 字段3 HAVING COUNT(*) > 1)
	AND id NOT IN (SELECT MIN(id) FROM 表 GROUP BY 字段1, 字段2, 字段3)
	ORDER BY 排序字段) as result)

在这里插入图片描述
注意删除这里不能直接使用下面的语句,要对查询到的此表重新取别名,相当于新建了表然后再执行删除,否则会报错You can’t specify target table ‘表’ for update in FROM clause,直译:你不能在FROM子句中指定更新的目标表,大概的意思是说,你不能这样执行sql语句 Delete From 表 Where id In (Select xxx From 表 Where 条件)

错误的sql语句!!!
DELETE FROM 表
WHERE id IN(SELECT id FROM 表 WHERE 某某条件
AND (字段1, 字段2, 字段3) IN (
	SELECT 字段1, 字段2, 字段3
	FROM 表 GROUP BY 字段1, 字段2, 字段3 HAVING COUNT(*) > 1 )
	AND id NOT IN (SELECT MIN(id) FROM 表 GROUP BY 字段1, 字段2, 字段3)
	ORDER BY 排序字段)

在这里插入图片描述

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐