Vorrei iniziare con delle ipotesi.
- Hai un modello di dati a catena:Progetti --* Schemi di progetto --* Schemi
- Il tuo obiettivo è avere solo catene valide, quindi nessun ProjectSchemes senza Project, nessuno Scheme senza ProjectSchemes.
- NULL non è un valore valido per uno dei tuoi ID.
- Tutti gli ID sono univoci nella loro tabella
- Non utilizzi i meccanismi di integrità referenziale del tuo database
Di conseguenza, il tuo SELECT elencherà lo schema_id per tutti gli schemi nella tabella degli schemi.
Detto questo, dovresti iniziare a eliminare tutti i ProjectSchemes senza un progetto corrispondente. Questi sono ProjectSchemes con un id NULL o un id che non esiste nella tabella dei progetti:
DELETE ProjectSchemes WHERE (Project_Id is NULL) OR
(NOT EXISTS (SELECT * FROM Projects WHERE
Projects.Project_Id = ProjectSchemes.Project_Id))
Dopo aver eliminato i ProjectsSchemes senza un progetto, ora potremmo avere alcuni nuovi orfani nella tabella degli schemi. La prossima cosa è ora eliminare tutti gli schemi che hanno un ID NULL o un ID che non esiste nella tabella ProjectsSchemes:
DELETE Schemes WHERE (Scheme_Id is NULL) OR
(NOT EXISTS (SELECT * FROM ProjectSchemes WHERE
ProjectSchemes.Scheme_Id = Schemes.Scheme_Id))
C'è ancora la possibilità di avere schemi che non sono collegati a un progetto senza eliminare i ProjectSchemes.