sql查询、删除重复相同数据的语句或只保留一条数据
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、查询(字段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 排序字段)
更多推荐
已为社区贡献7条内容
所有评论(0)