Ik wil graag beginnen met aannames.
- Je hebt een kettingachtig gegevensmodel:Projecten --* ProjectSchemes --* Schema's
- Je doel is om alleen geldige ketens te hebben, dus geen ProjectSchemes zonder Project, geen Schema's zonder ProjectSchemes.
- NULL is geen geldige waarde voor een van uw ID's.
- Alle ID's zijn uniek in hun tabel
- U gebruikt geen referentiële integriteitsmechanismen van uw database
Als gevolg hiervan zou uw SELECT de scheme_id voor alle schema's in de tabel Schema's weergeven.
Zei dat je zou moeten beginnen met het verwijderen van alle ProjectSchemes zonder een bijbehorend Project. Dit zijn ProjectSchemes met een id van NULL of een id die niet bestaat in de Projects Table:
DELETE ProjectSchemes WHERE (Project_Id is NULL) OR
(NOT EXISTS (SELECT * FROM Projects WHERE
Projects.Project_Id = ProjectSchemes.Project_Id))
Na het verwijderen van de ProjectsSchemes zonder Project hebben we nu mogelijk enkele nieuwe weeskinderen in de Schemes Table. Het volgende ding is nu om alle schema's te verwijderen die een id van NULL hebben of een id die niet bestaat in de ProjectsSchemes-tabel:
DELETE Schemes WHERE (Scheme_Id is NULL) OR
(NOT EXISTS (SELECT * FROM ProjectSchemes WHERE
ProjectSchemes.Scheme_Id = Schemes.Scheme_Id))
Er is nog steeds een kans om schema's te hebben die niet aan een project zijn gekoppeld zonder de ProjectSchemes te verwijderen.