Oracle
 sql >> Base de données >  >> RDS >> Oracle

Supprimer avec jointure gauche dans Oracle 10g

La solution de Shannon est la solution :utilisez l'opérateur NOT IN (ou NOT EXISTS).

Vous pouvez cependant supprimer ou mettre à jour une jointure dans Oracle, mais la syntaxe n'est pas la même que MS SQL Server :

SQL> DELETE FROM (SELECT grp.*
  2                  FROM grp
  3                  LEFT JOIN my_data ON grp.id1 = my_data.id1
  4                                   AND grp.id2 = my_data.id2
  5                                   AND grp.id3 = my_data.id3
  6                                   AND grp.id4 = my_data.id4
  7                 WHERE my_data.id1 IS NULL);

2 rows deleted

De plus, Oracle ne vous laissera mettre à jour une jointure que s'il n'y a pas d'ambiguïté quant à la ligne de base à laquelle l'instruction accédera. En particulier, Oracle ne risquera pas une mise à jour ou une suppression (l'instruction échouera) s'il est possible qu'une ligne apparaisse deux fois dans la jointure. Dans ce cas, la suppression ne fonctionnera que s'il existe une contrainte UNIQUE sur my_data(id1, id2, id3, id4).