Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

Cara elegan untuk menghapus baris yang tidak dirujuk oleh tabel lain

Ada satu gotcha terkenal untuk not in . Pada dasarnya, id not in (1,2,3) adalah singkatan dari:

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

Sekarang jika TimeEntries your Anda tabel berisi baris apa pun dengan TaskID dari null , not in diterjemahkan menjadi:

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

Hasil perbandingan dengan null selalu unknown . Karena unknown tidak benar dalam SQL, where klausa menyaring semua baris, dan Anda akhirnya tidak menghapus apa pun.

Perbaikan yang mudah adalah klausa where tambahan dalam subquery:

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. Apakah ada cara/alat untuk mengidentifikasi perkiraan waktu berjalan kueri di SQL SERVER

  2. Bagaimana SCHEMA_NAME() Bekerja di SQL Server

  3. Cara Menghapus Header Kolom saat Mengirim Hasil Kueri melalui Email di SQL Server (T-SQL)

  4. Memisahkan nilai yang dibatasi dalam kolom SQL menjadi beberapa baris

  5. Microsoft SQL Server 2008 Management Studio - Masalah Sambungan/Server/Instance