Oracle
 sql >> база данни >  >> RDS >> Oracle

Изтрийте с ляво присъединяване в Oracle 10g

Решението на Шанън е правилният начин:използвайте оператора NOT IN (или NOT EXISTS).

Можете обаче да изтриете или актуализирате присъединяване в Oracle, но синтаксисът не е същият като 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

Освен това Oracle ще ви позволи да актуализирате присъединяване само ако няма неяснота относно това кой основен ред ще бъде достъпен от оператора. По-специално, Oracle няма да рискува с актуализация или изтриване (изявлението ще се провали), ако има възможност ред да се появи два пъти в присъединяването. В този случай изтриването ще работи само ако има УНИКАЛНО ограничение за my_data(id1, id2, id3, id4).



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как да актуализирате с вътрешно присъединяване в Oracle

  2. Датата на Oracle TO_CHAR('ДД, ГГГГ') има допълнителни интервали в нея

  3. Приемливи ли са кръговите препратки в базата данни?

  4. Решение да не може да изпълни DML операция в заявка?

  5. Как да създадете колона, която не е нула в изглед