Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Jak usunąć rekordy NIE W

Chciałbym zacząć od założeń.

  1. Masz łańcuchowy model danych:Projekty --* Schematy projektów --* Schematy
  2. Twoim celem jest posiadanie tylko prawidłowych łańcuchów, więc żadnych Schematów Projektów bez Projektów, żadnych Schematów bez Schematów Projektów.
  3. NULL nie jest prawidłową wartością jednego z Twoich identyfikatorów.
  4. Wszystkie identyfikatory są unikalne w swojej tabeli
  5. Nie używasz mechanizmów integralności referencyjnej swojej bazy danych

W rezultacie Twój SELECT wyświetli identyfikator schematu dla wszystkich schematów w tabeli Schematy.

Powiedział, że powinieneś zacząć usuwać wszystkie ProjectSchemes bez odpowiedniego projektu. Są to schematy projektów z identyfikatorem NULL lub identyfikatorem, który nie istnieje w tabeli projektów:

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

Po usunięciu schematów projektów bez projektu możemy teraz mieć kilka nowych sierot w tabeli schematów. Następną rzeczą jest teraz usunięcie wszystkich schematów, które mają identyfikator NULL lub identyfikator, który nie istnieje w tabeli ProjectsSchemes:

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

Nadal istnieje szansa na posiadanie schematów, które nie są połączone z projektem bez usuwania schematów projektów.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak wysłać wiadomość e-mail w formacie HTML z serwera SQL (T-SQL)

  2. Job On Sql Server Agent nie kończy się, ale robi to w BIDS?

  3. sumProduct w sql

  4. SQL Server Najnowsze wersje, edycje i historia SQL Server

  5. Korzystasz z 3 aktualizacji w tej samej procedurze sklepu? Mały błąd