Бих искал да започна с предположения.
- Имате верижен модел на данни:Проекти --* Проектни схеми --* Схеми
- Вашата цел е да имате само валидни вериги, така че никакви ProjectSchemes без Project, никакви схеми без ProjectSchemes.
- NULL не е валидна стойност за един от вашите идентификатори.
- Всички идентификатори са уникални в своята таблица
- Не използвате механизми за референтна цялост на вашата база данни
В резултат на това вашият SELECT ще покаже схемата_id за всички схеми в таблицата със схеми.
Казано, че трябва да започнете да изтривате всички ProjectSchemes без съответен проект. Това са схеми на проекти с идентификатор NULL или идентификатор, който не съществува в таблицата с проекти:
DELETE ProjectSchemes WHERE (Project_Id is NULL) OR
(NOT EXISTS (SELECT * FROM Projects WHERE
Projects.Project_Id = ProjectSchemes.Project_Id))
След изтриването на ProjectsSchemes без Project сега може да имаме някои нови сираци в таблицата със схеми. Следващото нещо сега е да изтриете всички схеми, които имат идентификатор NULL или идентификатор, който не съществува в таблицата ProjectsSchemes:
DELETE Schemes WHERE (Scheme_Id is NULL) OR
(NOT EXISTS (SELECT * FROM ProjectSchemes WHERE
ProjectSchemes.Scheme_Id = Schemes.Scheme_Id))
Все още има шанс да имате схеми, които не са свързани с проект, без да изтриете ProjectSchemes.