Redshift中的update + case + join语句

时间:2019-09-20 21:05:54

标签: sql sql-update case amazon-redshift

我有来自SQL Server的代码,必须在Redshift中实现。

update t1 set some_flag = (case when b.some_value is null then false else true end)
from t1 a
left join t2 b on a.code = b.code;

我在Redshift中收到一条错误消息:

 Target table must be part of an equijoin predicate

如何修改以上内容以使其在Redshift中起作用?谢谢。

2 个答案:

答案 0 :(得分:1)

您必须使用列而不是别名来完全限定表名。我猜Redshift在更新命令中不支持表别名。

update merge_demo1
set lastname = (case when merge_demo1.lastname = merge_demo1.lastname then merge_demo1.lastname else merge_demo2.lastname end)
from merge_demo2
where merge_demo1.id = merge_demo2.id;

答案 1 :(得分:0)

尝试删除from子句中的引用:

update t1
    set some_flag = (case when b.some_value is null then false else true end)
from t2 b 
where t1.code = b.code;

Postgres(和Postgres派生的数据库)允许FROM的{​​{1}}子句。但是,表引用是UPDATE中被引用表的补充。这与SQL Server不同,在SQL Server中,假设可能,UPDATE中的表引用来自UPDATE子句-甚至在必要时忽略别名。

您应该可以将其简化为:

FROM