sql >> Base de Datos >  >> RDS >> Oracle

Eliminar con combinación izquierda en Oracle 10g

La solución de Shannon es el camino a seguir:use el operador NOT IN (o NOT EXISTS).

Sin embargo, puede eliminar o actualizar una unión en Oracle, pero la sintaxis no es la misma que la de 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

Además, Oracle solo le permitirá actualizar una combinación si no hay ambigüedad en cuanto a la fila base a la que accederá la instrucción. En particular, Oracle no se arriesgará a una actualización o eliminación (la declaración fallará) si existe la posibilidad de que una fila aparezca dos veces en la combinación. En este caso, la eliminación solo funcionará si existe una restricción ÚNICA en my_data(id1, id2, id3, id4).