【发布时间】:2017-02-22 20:50:46
【问题描述】:
这是我尝试运行的查询,以通过单个字符串中的 ID 更新多行。我正在使用 AWS Redshift(它基于非常旧的 PostgreSQL 版本):
UPDATE promotion
SET engagements = c.engagements
FROM (VALUES (668, 73), (684, 135), (680, 73), (672, 76), (682, 94),
(676, 4), (670, 81), (686, 104), (678, 1), (674, 0)
) AS c(id, engagements)
WHERE c.id = promotion.id;
这是正在产生的错误:
sqlalchemy.exc.ProgrammingError: (pg8000.core.ProgrammingError) (u'ERROR',
u'42601', u'syntax error at or near ","', u'72', u'/home/ec2-
user/padb/src/pg/src/backend/parser/parser_scan.l', u'699', u'yyerror', u'',
u'')
[SQL: 'UPDATE promotion SET engagements = c.engagements FROM (VALUES
(668, 73), (684, 135), (680, 73), (672, 76), (682, 94), (676, 4), (670, 81),
(686, 104), (678, 1), (674, 0)) AS c(id, engagements) WHERE c.id =
promotion.id;']
编辑:使用此处答案中的查询格式:Update multiple rows in same query using PostgreSQL
【问题讨论】:
-
@jarcobi889 是的,已修复。
-
这只是从网上查看其他人的代码进入黑暗的一种方式,但通常不是将 VALUES 放在括号外的格式吗? : FROM VALUES ((668, 73), (684, 135)...等
-
来自unsupported Postgres features: "VALUES 列表用作常量表"
-
@jarcobi889 我从这里得到它:stackoverflow.com/questions/18797608/…
-
Redshift 根本不支持这种语法。您所指的答案是针对 Postgres,而不是针对 Redshift
标签: sql sql-update amazon-redshift