PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

La suppression CTE n'est pas validée tant que les instructions suivantes ne sont pas terminées

Ceci est attendu et documenté.

Citation du manuel

Vous pouvez utilisez des CTE chaînés pour supprimer l'entreprise :

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) 

Il est important d'exclure l'employé qui vient d'être supprimé du not exists sous-requête car cela sera toujours visible dans la deuxième instruction de suppression et donc le non existe ne serait jamais vrai. Ainsi, la sous-requête vérifie essentiellement s'il existe un employé autre que celui supprimé affecté à la même entreprise.

Exemple en ligne :https://rextester.com/IVZ78695