Comment supprimer des lignes dans une table Teradata qui ne sont pas dans une autre table?

StackOverflow https://stackoverflow.com/questions/4321432

  •  29-09-2019
  •  | 
  •  

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"

Était-ce utile?

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
scroll top