Tôi muốn bắt đầu với các giả định.
- Bạn có một mô hình dữ liệu giống như chuỗi:Dự án - * Dự án - * Sơ đồ
- Mục tiêu của bạn là chỉ có các chuỗi hợp lệ, vì vậy không có ProjectSchemes nào mà không có Project, không có sơ đồ nào mà không có ProjectSchemes.
- NULL không phải là giá trị hợp lệ cho một trong các id của bạn.
- Tất cả id là duy nhất trong bảng của họ
- Bạn không sử dụng cơ chế toàn vẹn tham chiếu của cơ sở dữ liệu của mình
Kết quả là SELECT của bạn sẽ liệt kê sche_id cho tất cả các Lược đồ trong bảng Lược đồ.
Nói rằng, bạn nên bắt đầu xóa tất cả các ProjectSchemes mà không có Project tương ứng. Đây là những ProjectSchemes có id là NULL hoặc id không tồn tại trong Bảng dự án:
DELETE ProjectSchemes WHERE (Project_Id is NULL) OR
(NOT EXISTS (SELECT * FROM Projects WHERE
Projects.Project_Id = ProjectSchemes.Project_Id))
Sau khi xóa ProjectsSchemes mà không có Project, bây giờ chúng ta có thể có một số trẻ mồ côi mới trong Bảng lược đồ. Việc tiếp theo là xóa tất cả các Lược đồ có id là NULL hoặc id không tồn tại trong Bảng ProjectsSchemes:
DELETE Schemes WHERE (Scheme_Id is NULL) OR
(NOT EXISTS (SELECT * FROM ProjectSchemes WHERE
ProjectSchemes.Scheme_Id = Schemes.Scheme_Id))
Vẫn có cơ hội có các lược đồ không được kết nối với một dự án mà không xóa các Đề án.