Gostaria de começar com suposições.
- Você tem um modelo de dados em cadeia:Projetos --* ProjetoEsquemas --* Esquemas
- Sua meta é ter apenas cadeias válidas, portanto, não há ProjectSchemes sem Project, nem Schemes sem ProjectSchemes.
- NULL não é um valor válido para um de seus IDs.
- Todos os IDs são exclusivos em suas tabelas
- Você não usa mecanismos de integridade referencial de seu banco de dados
Como resultado, seu SELECT listaria o scheme_id para todos os Schemes na tabela Schemes.
Dito isso, você deve começar a excluir todos os ProjectSchemes sem um projeto correspondente. Estes são ProjectSchemes com um id de NULL ou um id que não existe na Tabela de Projetos:
DELETE ProjectSchemes WHERE (Project_Id is NULL) OR
(NOT EXISTS (SELECT * FROM Projects WHERE
Projects.Project_Id = ProjectSchemes.Project_Id))
Depois de excluir os ProjectsSchemes sem um projeto, agora podemos ter alguns novos órfãos na tabela de esquemas. A próxima coisa agora é excluir todos os Schemes que possuem um id de NULL ou um id que não existe na Tabela ProjectsSchemes:
DELETE Schemes WHERE (Scheme_Id is NULL) OR
(NOT EXISTS (SELECT * FROM ProjectSchemes WHERE
ProjectSchemes.Scheme_Id = Schemes.Scheme_Id))
Ainda há uma chance de ter esquemas que não estão conectados a um projeto sem excluir os ProjectSchemes.