(结合CASE和UPDATE语句)UPSERT在Amazon Redshift
问题描述:
我知道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')
我是新来的红移所以请原谅,如果我没有看到明显的东西。
答
要回答你的第一个问题,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'
)
;
那不是如何插入和更新的工作。为什么这个标签天蓝色?你不能在这样的子查询中使用插入和更新。阅读关于更新和插入的redshift/postgres文档。 –