下图红框内为需要删除的重复数据,但是要保留article_id最大的那一条数据。
这里有7条重复数据,应该删掉6条,保留article_id=279142的记录
首先要有两个唯一标识:
一个所有数据里都不会重复的标识,如自增id(article_id);
一个会出现重复,但可以唯一表示一条数据的标识(这里我取 title 或者 content);
DELETE FROM t_current_article
WHERE article_id IN (
SELECT * FROM (
SELECT DISTINCT a.article_id FROM t_current_article a
LEFT JOIN t_current_article b ON a.content = b.content
WHERE a.cat_id = 37 AND
a.article_id < b.article_id AND b.article_id IS NOT NULL
) temp
)
这里的重点是:
1.表的自我连接,让所有会重复的记录进行连接
2. “ a.article_id < b.article_id AND b.article_id IS NOT NULL ” 剔除掉最新的那条数据(要保留最新的那条数据)
结果:正确删去6条记录