首页 > 数据库 > mysql教程 > 如何使用 LIMIT 和 ORDER BY 更新具有偏移量的多个 MySQL 行?

如何使用 LIMIT 和 ORDER BY 更新具有偏移量的多个 MySQL 行?

Barbara Streisand
发布: 2025-01-01 02:11:11
原创
639 人浏览过

How Can I Update Multiple MySQL Rows with an Offset Using LIMIT and ORDER BY?

在 MySQL 中使用 LIMIT 更新多行

尝试使用 LIMIT 子句更新一组行时,开发人员可能会遇到错误,如果查询结构不正确。本文探讨了此类问题并提供了替代解决方案。

原始查询和错误:

考虑以下 SQL 查询:

UPDATE messages SET test_read = 1
WHERE userid='xyz'
ORDER BY date_added DESC
LIMIT 5, 5;
登录后复制

此查询尝试按 date_added 列的降序更新从第 6 行开始的 5 行。但是,执行此操作,MySQL 会报错。

错误原因:

出现该错误是因为 LIMIT 子句不能与 ORDER BY 子句结合使用当尝试更新多行时。 LIMIT 子句限制要返回的行数,而 ORDER BY 子句确定选择行的顺序。

替代解决方案:

要更新多个使用类似于 LIMIT 的方法的行,您可以使用以下解决方法:

UPDATE messages SET test_read=1
WHERE id IN (
     SELECT id FROM (
         SELECT id FROM messages
         ORDER BY date_added DESC
         LIMIT 5, 5
     ) tmp
 );
登录后复制

此查询首先执行子查询来选择要更新的行的 ID。然后,主查询使用这些 ID 来过滤将接收更新的行。

解决方案说明:

嵌套子查询选择 5 个的 ID从 date_added 列的降序排列的第 6 行开始的行。然后,外部查询使用这些 ID 来识别和更新相应的行。

结论:

虽然 LIMIT 子句不能直接使用 ORDER 来更新多行BY 子句,本文提供的替代解决方案可以让开发人员达到预期的结果。通过这种方式,开发者可以指定更新的起始点和行数,确保操作准确地针对目标行。

以上是如何使用 LIMIT 和 ORDER BY 更新具有偏移量的多个 MySQL 行?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板