我有3个表t1,t2和t3 t1有2列 - > id1,val1
t2 -> id2, val2
t3 -> id3, val3
If id1=id2 and id2 = id3
然后我需要更新val1 ad val3。 但我重复了id1,每个都应该有相同的val3
我正在使用
update t1
inner join t2 on t1.id1 = t2.id2
inner join t3 on t2.id2 = t3.id3
set t1.val1 = t3.val3
;
但不能这样做。
答案 0 :(得分:7)
我需要从Redshift上的另一个表t2.val3获取值。我使用了以下
update t1
set val1 = t2.val3
from t2 join t1 t on t.id = t2.id;
我必须重新命名t1。否则Redshift抱怨。
答案 1 :(得分:3)
正确的语法是:
UPDATE table_name SET column = { expression | DEFAULT} [,...]
[FROM fromlist ]
[WHERE 条件]
因此,您的UPDATE
语句应如下所示:
update t1 set val1 = val3
from t2 inner join t3 on t2.id2 = t3.id3
where t1.id1 = t2.id2
;
答案 2 :(得分:1)
每个@jie 解决方案,但扩展了一点并且没有表别名作为表名的干扰(呵呵):
update
my_counts
set
my_count_delta = t1.my_count - t2.my_count
from
my_counts t1 join
my_counts t2 on
t1.group_id = t2.group_id and
t2.count_dt = ( t1.count_dt - interval '1 day' )
where
t1.count_error is null
一些注意事项:
( t1.count_dt - interval '1 day' )
LEFT JOIN
的狂热爱好者,我感到困惑的是,这不会与左连接一起运行...错误消息非常清楚,需要“平衡连接”或者是“偶数连接”< /em>...所以我回到 JOIN
的 @jie 版本,发现查询非常快。