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

Slet med Left Join i Oracle 10g

Shannons løsning er vejen at gå:brug operatøren NOT IN (eller IKKE EKSISTERER).

Du kan dog slette eller opdatere en join i Oracle, men syntaksen er ikke den samme som 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

Derudover vil Oracle kun lade dig opdatere en joinforbindelse, hvis der ikke er nogen tvetydighed om, hvilken basisrække sætningen vil få adgang til. Især vil Oracle ikke risikere en opdatering eller en sletning (sætningen vil mislykkes), hvis der er mulighed for, at en række kan optræde to gange i joinforbindelsen. I dette tilfælde vil sletningen kun fungere, hvis der er en UNIK begrænsning på my_data(id1, id2, id3, id4).



  1. SQL Server Transactional Replication Internals

  2. Ingen understøttelse af OVER i MS SQL Server 2005?

  3. Kan du opdele/eksplodere et felt i en MySQL-forespørgsel?

  4. tilføj kolonne til mysql-tabellen, hvis den ikke eksisterer