sql >> Base de Datos >  >> RDS >> PostgreSQL

Eliminación de CTE no confirmada hasta que se completen las siguientes declaraciones

Esto es esperado y documentado.

Cita del manual

Tu puedes use CTE encadenados para eliminar la empresa:

with deleted_emp as (
  delete from employee 
  where id = 1 
  returning company_id, id as employee_id
)
delete from company
where id in (select company_id from deleted_emp) 
  and not exists (select * 
                  from employee e
                     join deleted_emp af 
                       on af.company_id = e.company_id 
                      and e.id <> af.employee_id) 

Es importante excluir al empleado recién eliminado de not exists subconsulta ya que siempre será visible en la segunda declaración de eliminación y, por lo tanto, no existe nunca sería cierto. Entonces, la subconsulta esencialmente verifica si hay un empleado que no sea el eliminado asignado a la misma empresa.

Ejemplo en línea:https://rextester.com/IVZ78695