sql >> Databáze >  >> RDS >> Oracle

Smazat pomocí levého spojení v Oracle 10g

Shannonovo řešení je správná cesta:použijte operátor NOT IN (nebo NOT EXISTS).

Můžete však smazat nebo aktualizovat spojení v Oracle, ale syntaxe není stejná jako u 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

Kromě toho vám Oracle umožní aktualizovat spojení pouze v případě, že neexistuje žádná nejednoznačnost ohledně toho, ke kterému základnímu řádku bude výpis přistupovat. Oracle zejména nebude riskovat aktualizaci nebo smazání (výpis se nezdaří), pokud existuje možnost, že se řádek ve spojení objeví dvakrát. V tomto případě bude odstranění fungovat pouze v případě, že existuje UNIKÁTNÍ omezení pro my_data(id1, id2, id3, id4).



  1. Co se stane s duplikáty při vkládání více řádků?

  2. Know-How k obnovení smazaných záznamů v SQL Server

  3. rozdíl mezi plánem vysvětlit a plánem provedení

  4. Mohu psát funkce PostgreSQL na Ruby on Rails?