2017-02-20 47 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中只有一條記錄?你甚至爲什麼加入SRC1;?我沒有看到它在查詢中的任何地方使用。 –

+0

[Vertica] [VJDBC](4856)錯誤:在「on」處或附近的語法錯誤 – Biswabid

回答

0

我希望你的語法能夠工作。 (我沒有Vertica方便,但查詢解析器基於Postgres。)

也許 - 不像Postgres - JOIN不允許在FROM。然後您可以將連接條件放在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;