如何在MySQL UPDATE语句中模拟偏移量?

如何在MySQL UPDATE语句中模拟偏移量?,mysql,offset,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

我有一个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,使用类似这样的内容。问题是偏移量在更新中似乎不起作用。有没有一种方法可以在单个查询中实现这一点

UPDATE articles
SET title = ''
WHERE title = '$duplicate_title'
ORDER BY id ASC
OFFSET 1
这基本上是说

更新存在具有相同标题和较低ID的匹配文章的所有文章


我找到了另一个解决方案,这个方案有点超出了我最初问题的范围,但仍然相关

我已经从第一次查询中找到了一些重复项。我从这个计数中减去一,然后按ID DESC对更新查询排序,然后将查询限制为计数减去一。这与此目的相同,并删除除第一个条目外的所有重复项

以下是我使用的更新查询:

UPDATE articles
SET title = ''
WHERE title = '$duplicate_title'
ORDER BY id DESC
LIMIT $duplicate_count_minus_one

你能解释一下a和B是什么吗?语法是什么?我在其他查询中看到过类似于“技巧”的东西,即使在阅读了正在发生的事情之后,我也无法理解它。
是一个参数占位符,通常在给定的复杂客户端(如PHP的PDO扩展)中使用。好吧,我清楚了吗?还有PDO。现在
更新文章a
从文章子部分选择1做什么?具体来说,我指的是
a
sub
。这是
文章作为
的快捷方式,允许我们在内部查询中访问外部查询中的数据而不发生冲突吗?是的,它是一个表别名。
AS
关键字是optional我想我对函数很清楚。现在我得到了这个错误,这似乎与我所理解的相矛盾:
您不能在FROM子句中指定更新的目标表“a”
UPDATE articles
SET title = ''
WHERE title = '$duplicate_title'
ORDER BY id DESC
LIMIT $duplicate_count_minus_one