2017-02-22 17 views
0

これは、複数の行をIDで1つの文字列に更新するために実行しようとしているクエリです。指定したVALUEでUPDATEを使用するとAmazon Redshiftの構文エラーが発生する

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; 

そして、これが生産されているエラーです:私は(PostgreSQLのの非常に古いバージョンに基づいています)AWS赤方偏移を使用してい

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;'] 

EDIT:ここの回答からクエリ形式を使用します: Update multiple rows in same query using PostgreSQL

+0

jarcobi889 @うはい、修正されました。 – jstudios

+0

これは、他人のコードをオンラインで見て暗闇の中に刺すだけですが、通常は囲み括弧の外側にVALUESを配置する形式ではありませんか? :FROM VALUES((668,723)、(684,135)...など) – jarcobi889

+0

[サポートされていないPostgresの機能](http://docs.aws.amazon.com/redshift/latest/dg/c_unsupported-postgresql- features.html): "* VALUESリストを定数テーブルとして使用*" –

答えて

0

Redshiftは、VALUESシンタックスを挿入用にのみサポートしています。しかし、あなたは本当にあなたがUNIONとの声明を構築することができ、別のコンテキストでは、このようなものを使用したい場合:

UPDATE promotion 
SET engagements = c.engagements 
FROM (
    SELECT 668 as id, 73 as engagements 
    UNION SELECT 684, 135 
    UNION SELECT 680, 73 
    -- to be continued 
) c 
WHERE c.id = promotion.id; 

が、私はより良いテーブルにレコードを挿入し、その後UPDATE FROMそのテーブル

関連する問題