【问题标题】:PostgreSQL - Synax error in Update Query [duplicate]PostgreSQL - 更新查询中的语法错误 [重复]
【发布时间】:2013-08-29 11:18:55
【问题描述】:

请检查下面的查询。

update product set product_price = 5 where product_price = 0
ERROR:  syntax error at or near "set" at character 45

SQL 错误:

ERROR:  syntax error at or near "set" at character 45

在声明中:

SELECT COUNT(*) AS total FROM (update product set product_price = 5 where product_price = 0) AS sub

我不知道为什么会收到此错误。请帮帮我。

【问题讨论】:

  • 你的说法没有任何意义。为什么要将update 包装成select。你真正想做什么?
  • 这是phppgadmin 的问题。见stackoverflow.com/questions/18368831/…
  • @DanielVérité 是正确的!只需取消选中“分页结果”复选框...

标签: postgresql phppgadmin


【解决方案1】:

update 语句不返回可在 select 中使用的值。

如果您想知道有多少行受到影响,according to this 可以使用

GET DIAGNOSTICS my_variable = ROWCOUNT;

有很多方法可以通过编程来实现,但具体如何实现取决于所使用的语言。

【讨论】:

  • 谢谢...我无法执行更新查询。我收到一个错误。你知道为什么吗?
  • 因为您的查询无效!您不能将更新用作选择的子查询。这在 postgres 中是不可能的。
  • 请理解,我的问题是更新产品集 product_price = 5 where product_price = 0 错误:在字符 45 处或附近的“set”处出现语法错误。这就解决了。我在 phppgadmin 响应中得到了选择查询。
  • 问题不是更新,问题是围绕更新使用的select;去掉select,只留下update语句就可以正常工作了。
  • 天啊!!!我只是在 phppgadmin 中单独粘贴了上面的更新查询。之后执行它。 Phppgadmin 在错误窗口中返回了“SQL 错误:”和“In statement:”行。清楚了吗?
【解决方案2】:
with s as (
    update product
    set product_price = 5
    where product_price = 0
    returning product_price
)
select count(*)
from s

【讨论】:

  • 感谢 Neto,但我收到“SQL 错误:错误:在字符 39 处或附近出现语法错误”。
  • @user 什么版本的 Postgresql? select version();
  • 它工作正常。检查这个小提琴sqlfiddle.com/#!12/b55e1/2
  • 版本:x86_64-redhat-linux-gnu 上的 PostgreSQL 8.1.23,由 GCC gcc (GCC) 4.1.2 20080704 (Red Hat 4.1.2-52) 编译
  • @user with 是 8.4+ 功能。立即升级到 9.2。
【解决方案3】:

SELECT COUNT(*) AS total FROM (yourquery) 包装似乎是由选中“分页结果”复选框引起的。如果您取消选中该框,您的更新应该会起作用。

【讨论】:

    猜你喜欢
    • 2013-08-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-29
    • 1970-01-01
    • 1970-01-01
    • 2016-10-16
    • 1970-01-01
    相关资源
    最近更新 更多