2017-02-20 15 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

Вы обновляете записи TGT со значениями из SRC/SRC1. Таким образом, в SRC/SRC1 на C9 имеется ровно одна запись? И почему вы даже присоединяетесь к SRC1 ;? Я не вижу, чтобы он использовался где-либо в вашем запросе. –

+0

[Vertica] [VJDBC] (4856) ОШИБКА: Синтаксическая ошибка в точке «рядом» или около нее – 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;