PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

A exclusão de CTE não foi confirmada até que as seguintes instruções sejam concluídas


Isso é esperado e documentado.

Citação do manual



Você pode use CTEs encadeados para excluir a 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) 

É importante excluir o funcionário que acabou de ser excluído do not exists subconsulta, pois sempre estará visível na segunda instrução de exclusão e, portanto, o não existe nunca seria verdadeiro. Portanto, a subconsulta verifica essencialmente se há um funcionário diferente do excluído atribuído à mesma empresa.

Exemplo on-line:https://rextester.com/IVZ78695