Ini diharapkan dan didokumentasikan.
Anda bisa gunakan CTE berantai untuk menghapus perusahaan:
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)
Penting untuk mengecualikan karyawan yang baru saja dihapus dari not exists
sub-query seperti itu akan selalu terlihat dalam pernyataan hapus kedua dan dengan demikian tidak ada tidak akan pernah benar. Jadi sub-kueri pada dasarnya memeriksa apakah ada karyawan selain yang dihapus yang ditugaskan ke perusahaan yang sama.
Contoh online:https://rextester.com/IVZ78695