Oracle
 sql >> Datenbank >  >> RDS >> Oracle

Löschen mit Left Join in Oracle 10g

Shannons Lösung ist der richtige Weg:Verwenden Sie den Operator NOT IN (oder NOT EXISTS).

Sie können jedoch einen Join in Oracle löschen oder aktualisieren, aber die Syntax ist nicht die gleiche wie bei 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

Darüber hinaus lässt Oracle Sie einen Join nur aktualisieren, wenn keine Zweideutigkeit darüber besteht, auf welche Basiszeile die Anweisung zugreift. Insbesondere riskiert Oracle keine Aktualisierung oder Löschung (die Anweisung schlägt fehl), wenn die Möglichkeit besteht, dass eine Zeile zweimal im Join erscheint. In diesem Fall funktioniert das Löschen nur, wenn es eine UNIQUE-Einschränkung für my_data(id1, id2, id3, id4). gibt