我需要运行此UPDATE查询,但仅在表中包含的最后121个值中运行。有可能的?
我的状态:
UPDATE estrutura q
SET q.id_horizonte =
(SELECT h.id_horizonte
FROM horizonte h
WHERE q.observacao = h.observacao
AND q.nome_horizonte = h.nome_horizonte)
WHERE id_horizonte DESC
LIMIT 121
我收到错误:
您的SQL语法有错误;检查手册 对应于您的MySQL服务器版本以使用正确的语法 在第3行的“ DESC LIMIT 121”附近
答案 0 :(得分:0)
似乎您正在尝试仅使用表{{的值来更新estrutura
表的前121个值(由id_horizonte
的降序定义的顺序) 1}},在horizonte
和observacao
上采用Join关系。如果我的解释错误,请纠正我。
代码中的一个问题是您在nome_horizonte
子句中使用DESC
。 Where
仅可与DESC
一起使用。
另一项改进可能是将查询更改为基于ORDER BY
的查询,而不是使用子查询,以便确定要设置的值。
尝试以下查询:
JOIN
答案 1 :(得分:-1)
修改where子句,如下所示:
id_horizonte所在的位置(从id_horizont desc的结构顺序中选择前121个id_horizonte)
答案 2 :(得分:-1)
您可以编写一个过程,在其中选择所需的条目,然后遍历并更新它们。一种不同但非常缓慢且效率低下的方法是将where子句修改为类似“ ... where in(subselect)”的内容。子查询应该返回最后121个条目的ID,当然您需要格式化它们以适合正确的语法。因此,如果您完全依赖SQL,则过程可能是实现目标的最简单方法。