Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

Cách thanh lịch để xóa các hàng không được tham chiếu bởi bảng khác

Có một gotcha khét tiếng cho not in . Về cơ bản, id not in (1,2,3) là viết tắt của:

id <> 1 and id <> 2 and id <> 3

Bây giờ nếu TimeEntries của bạn bảng chứa bất kỳ hàng nào có TaskID trong tổng số null , not in dịch sang:

ID <> null and ID <> 1 and ID <> 2 AND ...

Kết quả so sánh với null luôn unknown . Vì unknown không đúng trong SQL, where mệnh đề lọc ra tất cả các hàng và bạn sẽ không xóa được gì.

Cách khắc phục dễ dàng là bổ sung mệnh đề where trong truy vấn con:

DELETE FROM Tasks 
WHERE  ID not IN 
       (
       SELECT  TaskID 
       FROM    TimeEntries 
       WHERE   TaskID is not null
       )


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Các tính năng mới của SQL Server 2019

  2. Chèn các ký tự vào giữa chuỗi trong SQL Server (T-SQL)

  3. Bỏ tất cả các bảng, thủ tục được lưu trữ, trình kích hoạt, ràng buộc và tất cả các phụ thuộc trong một câu lệnh sql

  4. Định cấu hình Môi trường StartUp trong SQL Server Management Studio (SSMS) - Hướng dẫn SQL Server / TSQL Phần 7

  5. Làm cách nào để tạo một bảng dựa trên một bảng khác