2017-02-20 4 views
0

J'essayais de faire une jointure interne avec 3 tables dans une requête de mise à jour. J'ai essayé de trouver la solution dans plusieurs sites mais je n'ai pas eu la solution.
Suite à une requête d'exemple que je suis en train:
Comment faire une jointure interne dans 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; 

Merci à l'avance !!

+0

Vous recevez une erreur? –

+0

Vous mettez à jour les enregistrements TGT avec des valeurs provenant de SRC/SRC1. Donc, il y a exactement un enregistrement en SRC/SRC1 par C9? Et pourquoi adhérez-vous même à SRC1? Je ne le vois pas utilisé n'importe où dans votre requête. –

+0

[Vertica] [VJDBC] (4856) ERREUR: Erreur de syntaxe à ou près de "on" – Biswabid

Répondre

0

Je m'attendrais à ce que votre syntaxe fonctionne. (Je n'ai pas Vertica à portée de main, mais son analyseur de requête est basée sur Postgres.)

Peut-être - à la différence Postgres - JOIN n'est pas autorisé dans le FROM. Ensuite, vous pouvez mettre les conditions de jointure dans la clause 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;