Rád bych začal s předpoklady.
- Máte datový model podobný řetězu:Projekty --* Projektová schémata --* Schémata
- Vaším cílem je mít pouze platné řetězce, takže žádná ProjectSchemes bez Project, žádná schémata bez ProjectSchemes.
- NULL není platná hodnota pro jedno z vašich ID.
- Všechna ID jsou ve své tabulce jedinečná
- Nepoužíváte mechanismy referenční integrity vaší databáze
V důsledku toho by váš SELECT vypsal schéma_id pro všechna schémata v tabulce Schémata.
To znamená, že byste měli začít odstraňovat všechna ProjectSchemes bez odpovídajícího projektu. Toto jsou ProjectSchemes s id NULL nebo id, které neexistuje v tabulce projektů:
DELETE ProjectSchemes WHERE (Project_Id is NULL) OR
(NOT EXISTS (SELECT * FROM Projects WHERE
Projects.Project_Id = ProjectSchemes.Project_Id))
Po smazání ProjectsSchemes bez projektu nyní můžeme mít v tabulce schémat nějaké nové sirotky. Další věcí je nyní odstranit všechna schémata, která mají id NULL nebo id, které neexistuje v tabulce ProjectsSchemes:
DELETE Schemes WHERE (Scheme_Id is NULL) OR
(NOT EXISTS (SELECT * FROM ProjectSchemes WHERE
ProjectSchemes.Scheme_Id = Schemes.Scheme_Id))
Stále existuje možnost mít schémata, která nejsou připojena k projektu, aniž byste ProjectSchemes smazali.