Join 使用联接更新红移表

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、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
;
但无法执行此操作。

正确的语法是:

更新表_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版本的
    连接
    ,发现查询速度非常快

+2-这似乎是我在这里的主要参考资料。不过,表别名让人分心,我确实明白这可能是我最初没有遵循@moertel的解决方案的原因。我正在发布我最终得到的东西,主要是为了我下次回来的时候我自己:)
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