Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

Excluir com Left Join no Oracle 10g


A solução de Shannon é o caminho a seguir:use o operador NOT IN (ou NOT EXISTS).

No entanto, você pode excluir ou atualizar uma junção no Oracle, mas a sintaxe não é a mesma do 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

Além disso, o Oracle só permitirá que você atualize uma junção se não houver ambiguidade sobre qual linha base será acessada pela instrução. Em particular, o Oracle não arriscará uma atualização ou uma exclusão (a instrução falhará) se houver a possibilidade de uma linha aparecer duas vezes na junção. Nesse caso, a exclusão só funcionará se houver uma restrição UNIQUE em my_data(id1, id2, id3, id4).