Saya ingin memulai dengan asumsi.
- Anda memiliki model data seperti rantai:Proyek --* Skema Proyek --* Skema
- Target Anda adalah hanya memiliki rantai yang valid, jadi tidak ada Skema Proyek tanpa Proyek, tidak ada Skema tanpa Skema Proyek.
- NULL bukan nilai yang valid untuk salah satu ID Anda.
- Semua id unik di tabelnya
- Anda tidak menggunakan mekanisme integritas referensial database Anda
Akibatnya SELECT Anda akan mencantumkan schema_id untuk semua Skema di tabel Skema.
Mengatakan itu, Anda harus mulai menghapus semua ProjectSchemes tanpa Proyek yang sesuai. Ini adalah ProjectSchemes dengan id NULL atau id yang tidak ada di Tabel Proyek:
DELETE ProjectSchemes WHERE (Project_Id is NULL) OR
(NOT EXISTS (SELECT * FROM Projects WHERE
Projects.Project_Id = ProjectSchemes.Project_Id))
Setelah menghapus ProjectsSchemes tanpa Project, kami sekarang mungkin memiliki beberapa anak yatim baru di Tabel Skema. Hal selanjutnya adalah menghapus semua Skema yang memiliki id NULL atau id yang tidak ada di Tabel ProjectsSchemes:
DELETE Schemes WHERE (Scheme_Id is NULL) OR
(NOT EXISTS (SELECT * FROM ProjectSchemes WHERE
ProjectSchemes.Scheme_Id = Schemes.Scheme_Id))
Masih ada peluang untuk memiliki skema yang tidak terhubung ke proyek tanpa menghapus Skema Proyek.