2017-10-12 116 views
0

我知道Azure可以合併一個IF x THEN UPDATE ELSE INSERT,是否可以用Redshift SQL做同樣的事情?(結合CASE和UPDATE語句)UPSERT在Amazon Redshift

我目前正在驗證碼:

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文檔。 –

回答

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