sql >> Databasteknik >  >> RDS >> Oracle

Ta bort med Left Join i Oracle 10g

Shannons lösning är vägen att gå:använd operatören INTE I (eller INTE FINNS).

Du kan dock ta bort eller uppdatera en join i Oracle, men syntaxen är inte densamma 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

Dessutom låter Oracle dig bara uppdatera en join om det inte finns någon tvetydighet om vilken basrad som kommer att nås av uttalandet. I synnerhet kommer Oracle inte att riskera en uppdatering eller en radering (uttrycket kommer att misslyckas) om det finns en möjlighet att en rad kan dyka upp två gånger i kopplingen. I det här fallet kommer borttagningen endast att fungera om det finns en UNIK begränsning på my_data(id1, id2, id3, id4).



  1. Vad händer med dubbletter när du infogar flera rader?

  2. Hur man skapar PL/SQL lagrade procedurer utan parametrar i Oracle Database

  3. Lägg till saknad data från föregående månad eller år kumulativt

  4. Använda en Alias-kolumn i where-satsen i Postgresql