To se očekává a zdokumentuje.
můžete použijte zřetězené CTE k odstranění společnosti:
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)
Je důležité vyloučit právě odstraněného zaměstnance z not exists
sub-query, protože bude vždy viditelný ve druhém příkazu delete, a proto nebude existovat nikdy pravdivé. Poddotaz tedy v podstatě zkontroluje, zda ke stejné společnosti není přiřazen jiný zaměstnanec než ten, který byl odstraněn.
Online příklad:https://rextester.com/IVZ78695