Sql 偏移量和限制语法错误
这里怎么了 phpMyAdminSql 偏移量和限制语法错误,sql,mariadb,Sql,Mariadb,这里怎么了 phpMyAdmin update posts set pos = 'right' where pos = 'below' limit 4 offset 10; 我还尝试: update posts set pos = 'right' where pos = 'below' offset 10 limit 4; update posts set pos = 'right' limit 4 offset 10; update posts set pos = 'right' offse
update posts set pos = 'right' where pos = 'below' limit 4 offset 10;
我还尝试:
update posts set pos = 'right' where pos = 'below' offset 10 limit 4;
update posts set pos = 'right' limit 4 offset 10;
update posts set pos = 'right' offset 10 limit 4;
始终存在相同的错误:
#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'offset 10' at line 1
限制可与更新一起使用,但只能与行计数一起使用 因此,下面的查询将无限制地正常工作
update posts set pos = 'right' where pos = 'below'
请检查下面的链接有一些相同的优点
根据@Barmar的建议,在询问之前,请检查syntex并对此进行少量搜索。:) LIMIT可与更新一起使用,但只能与行计数一起使用 因此,下面的查询将无限制地正常工作
update posts set pos = 'right' where pos = 'below'
请检查下面的链接有一些相同的优点
根据@Barmar的建议,在询问之前,请检查syntex并对此进行少量搜索。:) 假设您的
posts
表具有id
主键,您可以:
update posts
set pos = 'right'
where id in
(
select id
from (
select id
from posts
where pos = 'below'
order by
id
limit 4
offset 10
) sub
)
为了解决MySQL的还不支持'LIMIT&IN/ALL/ANY/SOME子查询'
错误,需要使用双个子查询。喜欢
Raymond Nijland评论说,MySQL通常以主键顺序返回行,但是如果没有的顺序,就不能严格依赖于主键顺序 假设您的
posts
表具有id
主键,您可以:
update posts
set pos = 'right'
where id in
(
select id
from (
select id
from posts
where pos = 'below'
order by
id
limit 4
offset 10
) sub
)
为了解决MySQL的还不支持'LIMIT&IN/ALL/ANY/SOME子查询'
错误,需要使用双个子查询。喜欢
Raymond Nijland评论说,MySQL通常以主键顺序返回行,但是如果没有的顺序,就不能严格依赖于主键顺序 正如Barmar在评论中所说,在更新查询中不能使用带限制的偏移量
替换的最佳方法
update posts set pos = 'right' where pos = 'below' limit 4 offset 10;
假设您有一个带有主键和自动递增选项的id列。。这应该类似于使用限制4偏移量10
或限制10。4
p.s请注意,id必须从11递增到14,且不包含任何已删除的id
正如Barmar在评论中所说,在更新查询中不能使用带限制的偏移量
替换的最佳方法
update posts set pos = 'right' where pos = 'below' limit 4 offset 10;
假设您有一个带有主键和自动递增选项的id列。。这应该类似于使用限制4偏移量10
或限制10。4
p.s请注意,id必须从11递增到14,且不包含任何已删除的id
你不能将
OFFSET
与UPDATE
一起使用,只能使用LIMIT
。在这里阅读语法:当你遇到语法错误时,为什么不首先阅读语法文档?@Barmar,多么愚蠢的限制。非常感谢。除此之外,使用LIMIT with ORDER BY也没有意义,因为MySQL可以自由地以任意顺序返回/更新记录,而不必使用ORDER BY。您不能将OFFSET
与update
一起使用,只能使用LIMIT
。请阅读此处的语法:当出现语法错误时,为什么不首先阅读语法文档?@Barmar,多么愚蠢的限制。非常感谢。除此之外,使用LIMIT with ORDER BY也没有意义,因为MySQL可以自由地按任意顺序返回/更新记录,而无需按“MySQL通常以主键顺序返回行”返回。是的,众所周知InnoDB以主键顺序返回。MyISAM遵循表数据中的物理顺序。“MySQL通常以主键顺序返回行”是的,InnoDB以主键顺序返回。MyISAM遵循表数据中的物理顺序。这依赖于具有增量id
值的行,如果从表中删除行,则会中断@Andomar edited mine answer,因此该范围内的删除不会对更新的记录产生影响limit@bonaca我更新了这个答案,因为安德奥马尔的评论。。使用最新查询,因为在表上使用硬删除时,该查询更稳定。不能依赖id
等于行数。在更新的查询中,如果前10行中的一行被删除,则更新不会从第10行开始。这取决于具有增量id
值的行,如果从表中删除行,则会中断@Andomar编辑的我的答案,因此在该范围内的删除不会对更新的记录产生影响limit@bonaca我更新了这个答案,因为安德奥马尔的评论。。使用最新查询,因为在表上使用硬删除时,该查询更稳定。不能依赖id
等于行数。在更新的查询中,如果前10行中的一行被删除,则更新不会从第10行开始