sql >> Database >  >> RDS >> Oracle

Verwijderen met Left Join in Oracle 10g

De oplossing van Shannon is de juiste keuze:gebruik de operator NOT IN (of NOT EXISTS).

U kunt wel een join in Oracle verwijderen of bijwerken, maar de synthax is niet hetzelfde als 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

Bovendien laat Oracle u alleen een join bijwerken als er geen onduidelijkheid bestaat over welke basisrij door de instructie wordt benaderd. In het bijzonder zal Oracle geen update of een verwijdering riskeren (de verklaring zal mislukken) als de mogelijkheid bestaat dat een rij twee keer voorkomt in de join. In dit geval werkt het verwijderen alleen als er een UNIEKE beperking is op my_data(id1, id2, id3, id4).



  1. Een regeleinde invoegen in een SQL Server VARCHAR/NVARCHAR-tekenreeks

  2. Kan het Postgres-gegevenstype NUMERIC ondertekende waarden opslaan?

  3. 5 beveiligingsvoordelen van cloudgebaseerde oplossingen voor databasebewaking

  4. Hoe u updates van een tabel kunt voorkomen, met een uitzondering voor één situatie?