2017-10-12 2 views
0

私はAzureでIF x THEN UPDATE ELSE INSERTを組み合わせることが可能ですが、Redshift SQLでも同じことができますか?(CASEとUPDATE文を組み合わせたもの)AmazonレッドシフトのUPSERT

私は現在、このコードをしようとしています:

SELECT source, 
CASE WHEN (SELECT 1 FROM state WHERE name = 
'out_dev' AND environment = 'dev') > 0 
THEN 
(UPDATE state SET source='new source') 
ELSE (
INSERT state (source, name, load_time, hash, environment) 
VALUES ('test', 'out_dev', '2017-10-12 01:14:38', '"f324f873b05d0792a3192bc28f466835"', 'dev')) 
END 
FROM state 

これはエラーを返します:

[Amazon](500310) Invalid operation: syntax error at or near "state" 

Position: 132; 

(UPDATE state SET source='new source') 

私は明らかに何かを見ていないですので、もし許し赤方偏移に新しいです。

+0

これは挿入と更新の仕組みではありません。なぜこのタグがつけられているのですか?そのようなサブクエリで挿入と更新を使用することはできません。アップデート時にredshift/postgres docsを読んで、挿入してください。 –

答えて

0

最初の質問に答えるために、Redshift SQLには "If - Then - Else"のようなフロー制御文がありません。そのため、これはできません。あなたの具体的な例では、それはあなたが達成しようとしているものは本当に明確

はないのですが、あなたはそれが存在しない場合は、条件付き「テスト」の行を挿入したい場合は、あなたのような何かを行うことができます。

INSERT INTO state (source, name, load_time, hash, environment) 
SELECT 
    'test', 
    'out_dev', 
    '2017-10-12 01:14:38', 
    '"f324f873b05d0792a3192bc28f466835"', 
    'dev' 
WHERE NOT EXISTS 
    (
    SELECT 1 FROM state 
    WHERE name = 'out_dev' AND environment = 'dev' 
) 
; 
関連する問題