我有来自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中起作用?谢谢。
答案 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