web-dev-qa-db-ja.com

結合によるRedshiftテーブルの更新

3つのテーブル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
;

しかし、これはできません。

11
oxy_js

正しい構文は次のとおりです。

UPDATEtable_nameSET column = {expression|デフォルト } [、...]
[FROMfromlist]
[WHERE条件]

したがって、UPDATEステートメントは次のようになります。

update t1 set val1 = val3
from t2 inner join t3 on t2.id2 = t3.id3
where t1.id1 = t2.id2
;

Redshiftのドキュメント とその包括的な UPDATEの例 を参照してください。

11
moertel

Redshiftで他のテーブルt2.val3から値を取得する必要がありました。私は以下を使用しました

update t1 
set val1 = t2.val3
from t2 join t1 t on t.id = t2.id;

T1の名前を変更する必要があります。それ以外の場合、Redshiftは不平を言います。

9
Jie