AWS Redshift多列更新关联查询报错求助
问题原因与解决方案
错误原因
Redshift基于PostgreSQL语法规范,不允许在UPDATE的SET子句中使用目标表的别名(你代码里的t),但SQL Server支持这种写法,这就是报错column "t" of relation "producttest" does not exists的根源。
修正后的代码
直接去掉SET子句里的t.前缀即可,同时可以简化FROM子句的写法:
UPDATE dbo.producttest SET brand_code = s.mtl_brand_desc, prodname = s.pname FROM raw.data AS s WHERE Chain = CASE s.chain WHEN 1 THEN 'EPRC' WHEN 3 THEN 'FSC' WHEN 7 THEN 'CM' END AND item_number = REPLACE(s.item_id, '-', '')
如果习惯用JOIN写法,也可以这样写(同样不能在SET里用t.):
UPDATE dbo.producttest SET brand_code = s.mtl_brand_desc, prodname = s.pname FROM dbo.producttest AS t JOIN raw.data AS s ON t.Chain = CASE s.chain WHEN 1 THEN 'EPRC' WHEN 3 THEN 'FSC' WHEN 7 THEN 'CM' END AND t.item_number = REPLACE(s.item_id, '-', '')
额外注意点
如果raw.data中存在多条匹配producttest单条记录的情况,Redshift会随机选取一条进行更新,和SQL Server行为一致。如果需要确保更新逻辑的确定性,建议先通过DISTINCT或调整关联条件保证匹配关系唯一。
内容的提问来源于stack exchange,提问作者Rose
相关产品推荐
相关产品推荐

