如何在MySQL UPDATE语句中模拟OFFSET?

时间:2012-02-01 03:36:08

标签: mysql offset

我有一个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

2 个答案:

答案 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