Oracle
 sql >> Database >  >> RDS >> Oracle

Elimina con Left Join in Oracle 10g

La soluzione di Shannon è la strada da percorrere:utilizzare l'operatore NOT IN (o NOT EXISTS).

Puoi tuttavia eliminare o aggiornare un join in Oracle, ma la sintassi non è la stessa di 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

Inoltre, Oracle ti consentirà di aggiornare un join solo se non vi sono ambiguità su quale riga di base sarà accessibile dall'istruzione. In particolare, Oracle non rischierà un aggiornamento o una cancellazione (l'istruzione fallirà) se esiste la possibilità che una riga possa apparire due volte nel join. In questo caso, l'eliminazione funzionerà solo se esiste un vincolo UNIQUE su my_data(id1, id2, id3, id4).