如何根据联接更新 Redshift 中的表列值?

Posted

技术标签:

【中文标题】如何根据联接更新 Redshift 中的表列值?【英文标题】:How to update table's column value in Redshift based on a join? 【发布时间】:2020-03-13 16:40:33 【问题描述】:

如何在 Redshift 中使用此值更新此表:

UPDATE t1
SET col1 = 'new_value_here'
FROM t1
    LEFT JOIN t2
        on t1.col2 = t2.col2

WHERE
t1.country IN ('USA', 'JAPAN')
    AND t1.col1 = 'old_value_here'
    AND t2.col2 IS NULL;

我收到错误:“目标表必须是等值连接谓词的一部分;”

【问题讨论】:

有人可以帮忙吗? 【参考方案1】:

Redshift 不允许在 UPDATE 查询的 FROM 子句中使用任何 OUTER JOINS。您需要将其用作子查询或重新编写逻辑。

这是我对您的查询所做的,但随着您对数据的更好理解,您可能希望以您的方式编写它。

UPDATE t1
SET col1 = 'new_value_here'
from (select t1.col2 as t1_col2, t2.col2 as t2_col2 
      from t1 left join t2 on t1.col2=t2.col2) t1t2
WHERE t1t2.t1_col2=t1.col2
    and t1t2.t2_col2 is null
    and t1.country IN ('USA', 'JAPAN')
    AND t1.col1 = 'old_value_here';

【讨论】:

以上是关于如何根据联接更新 Redshift 中的表列值?的主要内容,如果未能解决你的问题,请参考以下文章

MySQL - 根据更新其他表列值触发更新列值

如何使用 Amazon Redshift 中的临时表列更新现有表中的列?

如何进行内部联接查询以获取多个选定的表列

使用连接忽略选择中的表列值

更新 SQL Server 2005 中的表列

Redshift UPDATE 非常慢