Join 使用联接更新红移表
我有三张表t1、t2和t3。Join 使用联接更新红移表,join,sql-update,amazon-redshift,Join,Sql Update,Amazon Redshift,我有三张表t1、t2和t3。 t1有2列->id1,val1 t2 -> id2, val2 t3 -> id3, val3 If id1=id2 and id2 = id3 然后我需要更新val1和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
t1有2列->id1,val1
t2 -> id2, val2
t3 -> id3, val3
If id1=id2 and id2 = id3
然后我需要更新val1和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
;
但无法执行此操作。正确的语法是:
更新表_name SET column={expression | DEFAULT}[,…][来自fromlist]
[在条件允许的情况下] 因此,您的
UPDATE
语句应如下所示:
update t1 set val1 = val3
from t2 inner join t3 on t2.id2 = t3.id3
where t1.id1 = t2.id2
;
请参阅及其综合信息。我需要从另一个表t2.val3中获取红移值。我使用了以下方法
update t1
set val1 = t2.val3
from t2 join t1 t on t.id = t2.id;
我必须重新命名t1。否则,Redshift会抱怨。每@jie解决方案,但扩展了一点,没有将表别名作为表名(呵呵): 请注意:
- 我的计数是一个连续的总数
- my_count_delta是前一天输入(-/+)的更改
- 这解决了存在running total的问题,但需要添加增量的摘要列数据
- :heart:pg风格的sql如何使日期加减变得如此简单:
(t1.count\u dt-间隔“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