2017-10-12 110 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' 
) 
;