Mysql 删除几乎没有条件的所有重复主题

Mysql 删除几乎没有条件的所有重复主题,mysql,sql,duplicates,sql-delete,Mysql,Sql,Duplicates,Sql Delete,我试图让sql删除所有重复的标题,但必须在以下条件下删除重复的标题: 必须仅删除具有相同对象id的重复项 必须只保留最新记录最大的主题id topic id是每个主题AI的唯一id 到目前为止,我已经做了选择测试 SELECT topic_id,object_id,title,url,date FROM topics GROUP BY title HAVING ( COUNT(title) > 1) ORDER BY topic_id DESC 但不符合条件。 我正在使用mysql

我试图让sql删除所有重复的标题,但必须在以下条件下删除重复的标题:

必须仅删除具有相同对象id的重复项 必须只保留最新记录最大的主题id topic id是每个主题AI的唯一id 到目前为止,我已经做了选择测试

SELECT topic_id,object_id,title,url,date 
FROM topics GROUP BY title 
HAVING ( COUNT(title) > 1) 
ORDER BY topic_id DESC
但不符合条件。
我正在使用mysql。

这将删除所有重复的对象id记录,但保留主题id最高的记录

delete from topics outer where exists
(
    select 1 from topics inner where 
        outer.object_id = inner.object_id AND 
        inner.topic_id  < outer.topic_id
)

首先,如果您有一个日期字段,那么最好按日期识别最新记录

这将有助于:

SELECT topic_id, object_id, title, url, date 
FROM   topics earlier
WHERE  EXISTS 
    (SELECT newest.topic_id 
     FROM   topics newest 
     WHERE  newest.date      > earlier.date 
     AND    newest.object_id = earlier.object_id)
您正在选择的行中存在另一行,该行具有相同的对象id和较新的日期。

在MySQL中,您不能将目标表指定给子查询中的DML操作,除非您将其嵌套到一级以上的深度,但在这种情况下,您将无法获得可靠的结果,并且无法使用相关子查询

使用联接:


在主题对象id、标题、主题id上创建索引,以便快速运行。

使用tbl作为选择主题id、对象id、行号按对象id的过度划分按主题id描述的顺序作为rnum 来自主题 删除rnum>1的tbl

有关更多信息,请查看本文:

在MySQL中不起作用。将导致错误代码:1093您不能从子句中指定更新的目标表。边,内部和外部是关键字hanks,似乎它可以完成此任务。
DELETE  td
FROM    topics td
JOIN    topics ti
ON      ti.object_id = td.object_id
        AND ti.title = td.title
        AND ti.topic_id > td.topic_id;