これは予想され、文書化されています。
できます 連鎖CTEを使用して会社を削除します:
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)
削除したばかりの従業員を存在しないコード>から除外することが重要です サブクエリは、2番目のdeleteステートメントで常に表示されるため、存在しないことは決して真ではありません。したがって、サブクエリは基本的に、削除された従業員以外の従業員が同じ会社に割り当てられているかどうかを確認します。
オンラインの例: https://rextester.com/IVZ78695