PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

Eliminazione CTE non confermata fino al completamento delle seguenti istruzioni

Questo è previsto e documentato.

Citazione dal manuale

puoi utilizzare CTE concatenati per eliminare l'azienda:

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 escludere il dipendente appena eliminato da not exists sub-query in quanto sarà sempre visibile nella seconda istruzione delete e quindi non esiste non sarebbe mai vero. Quindi la sottoquery controlla essenzialmente se c'è un dipendente diverso da quello eliminato assegnato alla stessa azienda.

Esempio online:https://rextester.com/IVZ78695