Mysql 删除几乎没有条件的所有重复主题
我试图让sql删除所有重复的标题,但必须在以下条件下删除重复的标题: 必须仅删除具有相同对象id的重复项 必须只保留最新记录最大的主题id topic id是每个主题AI的唯一id 到目前为止,我已经做了选择测试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
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;