2017-02-20 13 views
0

更新クエリで3つのテーブルを使用して内部結合を実行しようとしていました。私は複数のサイトで解決策を見つけようとしましたが、解決策は得られませんでした。サンプルクエリ私がしようとしています続き
:事前に
Vertica Updateで内部結合を行う方法は?

UPDATE TGT 
SET C1 = CASE WHEN TGT.c2 = SRC.c2 AND SRC.C3 = 'P' THEN SRC.C1 ELSE NULL END, 
C2 = CASE WHEN TGT.c2 = SRC.c2 AND SRC.C3 = 'D' THEN SRC.C1 ELSE NULL END 
FROM SRC 
INNER JOIN SRC1 
ON SRC.C9 = SRC1.C9 
AND SRC.C9 = TGT.C9; 

感謝!!

+0

エラーが発生しましたか? –

+0

SRC/SRC1の値でTGTレコードを更新しています。 C9あたりSRC/SRC1には正確に1つのレコードがありますか?あなたはなぜSRC1に参加するのですか?私はそれがあなたの質問のどこにでも使われているのを見ません。 –

+0

[Vertica] [VJDBC](4856)エラー:または "on"または近くの構文エラー – Biswabid

答えて

0

あなたの構文がうまくいくと思います。 (私はVerticaを手軽に利用することはできませんが、そのクエリパーサはPostgresに基づいています)

おそらく - ではPostgres - JOINとは異なります。次に、WHERE句に結合条件を設定できます。

UPDATE TGT 
    SET C1 = (CASE WHEN TGT.c2 = SRC.c2 AND SRC.C3 = 'P' THEN SRC.C1 END) 
     C2 = (CASE WHEN TGT.c2 = SRC.c2 AND SRC.C3 = 'D' THEN SRC.C1 END) 
FROM SRC, SRC1 
WHERE SRC.C9 = SRC1.C9 AND SRC.C9 = TGT.C9; 
関連する問題