Comment supprimer des lignes dans une table Teradata qui ne sont pas dans une autre table?
Question
Ce qui rend ma situation délicate est que je n'ai pas une clé à une seule colonne, avec une liste simple des clés primaires à supprimer (par exemple, « supprimer de la table où clé ([liste]) »). Je dispose de plusieurs colonnes en même temps que la clé primaire, et aurait besoin de se joindre à tous.
En utilisant ce que je connais d'autres bases de données, je pensais que cela pourrait se faire comme suit:
DELETE FROM
table1 t1
LEFT OUTER JOIN
table2 t2
ON
t2.key1 = t1.key1 AND
t2.key2 = t1.key2
WHERE
t2.key1 IS NULL;
Mais Teradata (v12) répond avec le numéro d'erreur 3706, en disant "erreur de syntaxe:. Tables jointes ne sont pas autorisés dans la clause FROM"
La solution
Trouvé cela se fait par:
DELETE FROM
table1
WHERE
(key1, key2) NOT IN (
SELECT UNIQUE key1, key2 FROM table2
);
Autres conseils
Une autre façon est d'utiliser une sous-requête corrélative:
Delete From Table1
Where Not Exists(
Select 1
From Table2
Where Table2.key1 = Table1.key1
And Table2.key2 = Table1.key2
)
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow