sql >> Databáze >  >> RDS >> Sqlserver

Jak odstranit záznamy, které NEJSOU IN

Rád bych začal s předpoklady.

  1. Máte datový model podobný řetězu:Projekty --* Projektová schémata --* Schémata
  2. Vaším cílem je mít pouze platné řetězce, takže žádná ProjectSchemes bez Project, žádná schémata bez ProjectSchemes.
  3. NULL není platná hodnota pro jedno z vašich ID.
  4. Všechna ID jsou ve své tabulce jedinečná
  5. 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.



  1. Vyberte položky z různých zdrojů a seřaďte je podle data

  2. CakePHP:Vytvoření nového řádku HABTM místo toho aktualizuje jiné

  3. Vkládání dat před rokem 1950 v Oracle

  4. MYSQL:Dokážete získat výsledky, které odpovídají 3 ze 4 výrazů?