Jest to oczekiwane i udokumentowane.
możesz użyj połączonych CTE, aby usunąć firmę:
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)
Ważne jest, aby wykluczyć właśnie usuniętego pracownika z listy not exists
podzapytanie, ponieważ będzie ono zawsze widoczne w drugiej instrukcji delete, a zatem nie istnieje nigdy nie będzie prawdziwe. Tak więc podzapytanie zasadniczo sprawdza, czy istnieje pracownik inny niż usunięty, przypisany do tej samej firmy.
Przykład online:https://rextester.com/IVZ78695