仅更新包含的最后一个值

时间:2018-10-08 21:56:36

标签: mysql sql

我需要运行此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”附近

3 个答案:

答案 0 :(得分:0)

似乎您正在尝试仅使用表{{的值来更新estrutura表的前121个值(由id_horizonte的降序定义的顺序) 1}},在horizonteobservacao上采用Join关系。如果我的解释错误,请纠正我。

代码中的一个问题是您在nome_horizonte子句中使用DESCWhere仅可与DESC一起使用。

另一项改进可能是将查询更改为基于ORDER BY的查询,而不是使用子查询,以便确定要设置的值。

尝试以下查询:

JOIN

答案 1 :(得分:-1)

修改where子句,如下所示:

id_horizo​​nte所在的位置(从id_horizo​​nt desc的结构顺序中选择前121个id_horizo​​nte)

答案 2 :(得分:-1)

您可以编写一个过程,在其中选择所需的条目,然后遍历并更新它们。一种不同但非常缓慢且效率低下的方法是将where子句修改为类似“ ... where in(subselect)”的内容。子查询应该返回最后121个条目的ID,当然您需要格式化它们以适合正确的语法。因此,如果您完全依赖SQL,则过程可能是实现目标的最简单方法。