解决思路: 删除表中多余的重复记录,重复记录是根据单个字段 (字段1) 来判断,只保留id最小的记录.
根据以上思路有了下面SQL语句:
DELETE
FROM
table_name
WHERE
字段1 IN (
SELECT
字段1
FROM
table_name
GROUP BY
字段1
HAVING
count( 字段1 ) > 1
)
AND id NOT IN (
SELECT
min( id )
FROM
table_name
GROUP BY
字段1
HAVING
count( 字段1 ) > 1
)
但是,以上SQL语句执行会报以下错误:
意思就是:您无法在FROM子句中指定目标表’table_name’进行更新;在MySQL官方文档中查阅到该行为的记录:https://dev.mysql.com/doc/refman/5.7/en/update.html
解决方案: 嵌套子查询构成一个临时表。因此,它不算作您要从中删除数据的表,换句话说就是:在MySQL中,您无法修改SELECT字句中使用的同一个表;
SQL语句如下:
DELETE
FROM
table_name
WHERE
id IN (
SELECT
*
FROM
(
SELECT
MAX( id ) id
FROM
table_name
GROUP BY
字段1
HAVING
COUNT( 字段1 ) > 1
) AS X
)
执行结果:
我执行的此表中有快600万条数据,所以执行时间稍稍有点儿久
当然,以上只是其中的一种解决方案.