我有一个MySQL数据库表,其中包含文章ID(主键)和文章标题。我想从表中删除重复的标题,但保留第一次出现的标题。我最初只是对所有重复的标题进行查询:
SELECT
title,
count( id ) AS count
FROM articles
GROUP BY title
HAVING count > 1
然后我使用foreach循环和此命令将所有重复的标题替换为空白:
UPDATE articles
SET title = ''
WHERE title = '$duplicate_title'
我想更新articles
表,并根据文章ID ASC使用类似的内容替换除第一个条目之外的所有重复标题。问题是OFFSET似乎不能在UPDATE中工作。有没有办法在单个查询中执行此操作?
UPDATE articles
SET title = ''
WHERE title = '$duplicate_title'
ORDER BY id ASC
OFFSET 1
答案 0 :(得分:1)
UPDATE articles a
INNER JOIN articles b
ON a.title = b.title AND a.ID > b.ID
SET title = '';
这基本上是说
更新所有文章,其中存在具有相同标题和较低ID的匹配文章
答案 1 :(得分:1)
我发现另一个解决方案有点超出我原来问题的范围,但仍然相关。
我已经从找到它们的第一个查询中获得了重复数。我从此计数中减去一个,然后通过ID DESC命令我的UPDATE查询,然后将查询限制为计数减1。这用于相同的目的,并删除除第一个条目之外的所有重复项。
这是我使用的UPDATE查询:
UPDATE articles
SET title = ''
WHERE title = '$duplicate_title'
ORDER BY id DESC
LIMIT $duplicate_count_minus_one