Apa yang Anda lihat dengan masalah aturan adalah bahwa sistem aturan tidak menangani data secara atom. Penghapusan pertama dijalankan terlepas dari urutan dua pernyataan dalam aturan DO INSTEAD. Pernyataan kedua tidak pernah dieksekusi, karena baris yang dirujuk OLD.id telah dihapus dari tampilan. Anda bisa menggunakan LEFT JOIN, tetapi itu tidak akan membantu Anda karena contoh desain tabel (mungkin bekerja pada skema database Anda yang sebenarnya).
Masalah mendasar, seperti yang saya lihat, adalah Anda memperlakukan sistem aturan sebagai pemicu.
Pilihan terbaik Anda adalah menggunakan kunci asing dan ON DELETE CASCADE
bukannya aturan. Dengan mereka, skema contoh Anda juga akan berfungsi:Anda hanya perlu menghapus untuk tabel induk untuk menyingkirkan semua anak.