Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Как да изтриете записи НЕ В

Бих искал да започна с предположения.

  1. Имате верижен модел на данни:Проекти --* Проектни схеми --* Схеми
  2. Вашата цел е да имате само валидни вериги, така че никакви ProjectSchemes без Project, никакви схеми без ProjectSchemes.
  3. NULL не е валидна стойност за един от вашите идентификатори.
  4. Всички идентификатори са уникални в своята таблица
  5. Не използвате механизми за референтна цялост на вашата база данни

В резултат на това вашият SELECT ще покаже схемата_id за всички схеми в таблицата със схеми.

Казано, че трябва да започнете да изтривате всички ProjectSchemes без съответен проект. Това са схеми на проекти с идентификатор NULL или идентификатор, който не съществува в таблицата с проекти:

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

След изтриването на ProjectsSchemes без Project сега може да имаме някои нови сираци в таблицата със схеми. Следващото нещо сега е да изтриете всички схеми, които имат идентификатор NULL или идентификатор, който не съществува в таблицата ProjectsSchemes:

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

Все още има шанс да имате схеми, които не са свързани с проект, без да изтриете ProjectSchemes.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Получаване на текущата дата в SQL Server?

  2. Как можете да представите наследството в база данни?

  3. Колко знака във varchar(max)?

  4. Как да предефинирате колоните, върнати от съхранена процедура в SQL Server

  5. Импортирайте CSV файл в SQL Server