我正在尝试让sql删除所有重复的标题但是必须删除具有以下条件的重复项:
到目前为止,我已经完成了(使用select ...进行测试)
SELECT topic_id,object_id,title,url,date
FROM topics GROUP BY title
HAVING ( COUNT(title) > 1)
ORDER BY topic_id DESC
但不符合条件。
我正在使用mysql。
答案 0 :(得分:5)
在MySQL
中,您无法在子查询中将目标表指定为DML
操作(除非您将其嵌套多个深度,但在这种情况下,您将无法获得可靠的结果,不能使用相关子查询。)
使用JOIN
:
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;
在topics (object_id, title, topic_id)
上创建一个索引,以便快速工作。
答案 1 :(得分:1)
这将删除所有重复的object_id记录,保存具有最高topic_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
)
答案 2 :(得分:0)
首先,如果您有一个日期字段,那么您最好根据日期确定最新记录。
这将有效:
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)
您选择的行与另一行具有相同的object_id和更近的日期。
答案 3 :(得分:-1)
WITH tbl AS(SELECT topic_id,object_id,row_number()over(由object_id DESC按object_id顺序划分)作为rnum
FROM主题)
DELETE tbl WHERE rnum&gt; 1
有关详细信息,请查看此文章: http://blog.sqlauthority.com/2009/06/23/sql-server-2005-2008-delete-duplicate-rows/