一个没留神,数据库表table1被同事改的代码插入了重复数据,是很规律的每一条数据重复出现两次,查重SQL如下:
SELECT column1, count(*) num FROM table1 GROUP BY column1 HAVING num > 1
本来打算参照其他去重的办法直接套用SQL语句:
DELETE FROM table1
WHERE id NOT IN
(
SELECT
a.id
FROM (
SELECT MAX( id ) AS id FROM table1 GROUP BY column1
)a
)
奈何写了两句才发现,这个表,它没主键!!想了一下,没有主键且所有字段都没有要求唯一的情况下,没有任何办法可以区分两条重复数据,老老实实用中间表吧,复制当前表结构,建立table1_copy,然后把所有非重复数据拷过去:
INSERT INTO table1_copy (
SELECT DISTINCT
column1,
column2,
...,
columnX
FROM
table1
)
鉴于我遇到的数据情况很简单,DISTINCT column1就可以完美匹配当前需求,数据拷过去之后给当前table1重命名改为备份表,table1_copy重命名为table1即可。