sql >> Databasteknik >  >> RDS >> Sqlserver

Hur man tar bort poster INTE IN

Jag skulle vilja börja med antaganden.

  1. Du har en kedjeliknande datamodell:Projects --* Project Schemes --* Schemes
  2. Ditt mål är att bara ha giltiga kedjor, så inga Project Schemes utan Project, inga Schemes utan Project Schemes.
  3. NULL är inte ett giltigt värde för ett av dina ID.
  4. Alla ID är unika i sin tabell
  5. Du använder inte referensintegritetsmekanismer för din databas

Som ett resultat av detta skulle din SELECT lista scheme_id för alla Schemes i Schemes-tabellen.

Sa att du borde börja ta bort alla Project Schemes utan ett motsvarande projekt. Dessa är projektscheman med ett ID på NULL eller ett ID som inte finns i projekttabellen:

DELETE ProjectSchemes WHERE (Project_Id is NULL) OR 
(NOT EXISTS (SELECT * FROM Projects WHERE
             Projects.Project_Id = ProjectSchemes.Project_Id))

Efter att ha tagit bort Projects Schemes utan projekt kan vi nu ha några nya föräldralösa barn i Schemes-tabellen. Nästa sak är nu att ta bort alla scheman som har ett ID på NULL eller ett id som inte finns i Projects Schemes-tabellen:

DELETE Schemes WHERE (Scheme_Id is NULL) OR 
(NOT EXISTS (SELECT * FROM ProjectSchemes WHERE
             ProjectSchemes.Scheme_Id = Schemes.Scheme_Id))

Det finns fortfarande en chans att ha scheman som inte är kopplade till ett projekt utan att ta bort Project Schemes.



  1. Hur man fixar 'Metod 'get_Info' i typen 'Oracle.EntityFrameworkCore har ingen implementering.'

  2. Spring JDBC-stöd och stor datauppsättning

  3. Återställning efter fel MySQL-uppdateringsfråga?

  4. Ansluter till MySQL via SSL med PHP