带值列表参数的PostgreSQL UPDATE查询报错,INSERT语句却正常
PostgreSQL UPDATE语句值列表语法错误修正
你遇到的问题是UPDATE语句误用了INSERT的VALUES语法,PostgreSQL的UPDATE不支持这种写法,而INSERT的语法本身就是设计成那样的,所以后者能正常运行。
错误的UPDATE语句:
update user set (username, firstname, lastname) values($1, $2, $3) where id = 3
两种正确的写法:
1. 传统逐个列赋值(最常用)
UPDATE "user" SET username = $1, firstname = $2, lastname = $3 WHERE id = 3;
2. 行构造器语法(贴近你原本的列表形式)
PostgreSQL支持用行构造器一次性给多个列赋值,语法是把列列表和值列表都用括号包裹,中间用等号连接:
UPDATE "user" SET (username, firstname, lastname) = ($1, $2, $3) WHERE id = 3;
注意点:
user是PostgreSQL的保留关键字,建议用双引号"user"包裹表名,避免语法冲突(虽然某些场景下不报错,但规范写法更稳妥)。
内容的提问来源于stack exchange,提问作者Jimski
相关产品推荐
相关产品推荐

