You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Redshift使用INNER JOIN执行UPDATE时报等值连接错误的原因排查

Redshift UPDATE报错「Target table must be part of an equijoin predicate」的解决方法

你的问题出在Redshift对UPDATE语句的语法限制上:更新的目标表必须直接参与到FROM子句的等值连接逻辑中,而你的写法里,外层要更新的jwan.photos_audit_v4和FROM子句里的别名表t(同一个物理表)之间没有任何关联条件,Redshift无法确定要更新的行和FROM查询结果里的行是如何对应的,哪怕你用了INNER JOIN也没用。

修正后的两种写法:

写法一:直接关联目标表和临时表

-- expire previous photos that have been replaced
update  jwan.photos_audit_v4
set     expiry_date = s.user_updated
from    _sc95897_tmp_photos_audit_v4 as s
where   jwan.photos_audit_v4.user_id = s.user_id 
        and jwan.photos_audit_v4.position = s.position
        and jwan.photos_audit_v4.expiry_date is null 
        and s.idx = 1
;

写法二:显式关联目标表和FROM中的别名表

如果你需要保留原有的表别名逻辑,可以给目标表也加别名,然后通过等值条件关联FROM里的t表:

-- expire previous photos that have been replaced
update  jwan.photos_audit_v4 as target
set     expiry_date = s.user_updated
from    jwan.photos_audit_v4 as t
        INNER JOIN _sc95897_tmp_photos_audit_v4 as s
        on t.user_id = s.user_id and t.position = s.position
WHERE target.user_id = t.user_id 
      and target.position = t.position
      and t.expiry_date is null 
      and s.idx = 1
;

本质上,Redshift要求UPDATE的目标表必须在WHERE或FROM的JOIN条件里,和其他表有明确的等值匹配,否则无法安全地定位要更新的行。

内容的提问来源于stack exchange,提问作者Jwan622

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.30 23:27:45