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

<> vs TIDAK DI

SELECT something
FROM someTable
WHERE idcode NOT IN (SELECT ids FROM tmpIdTable)

memeriksa nilai apa pun dalam daftar.

Namun, NOT IN tidak toleran NULL. Jika sub-kueri mengembalikan sekumpulan nilai yang berisi NULL, tidak ada catatan yang akan dikembalikan sama sekali. (Ini karena secara internal NOT IN dioptimalkan menjadi idcode <> 'foo' AND idcode <> 'bar' AND idcode <> NULL dll., yang akan selalu gagal karena perbandingan apa pun dengan NULL menghasilkan UNKNOWN, mencegah seluruh ekspresi menjadi TRUE.)

Varian yang lebih baik dan toleran NULL adalah ini:

SELECT something
FROM someTable
WHERE NOT EXISTS (SELECT ids FROM tmpIdTable WHERE ids = someTable.idcode)

EDIT:Awalnya saya berasumsi bahwa ini:

SELECT something
FROM someTable
WHERE idcode <> (SELECT ids FROM tmpIdTable)

akan memeriksa terhadap nilai pertama saja. Ternyata asumsi ini salah setidaknya untuk SQL Server, di mana itu benar-benar memicu kesalahannya:

Msg 512, Level 16, State 1, Line 1
Subquery returned more than 1 value. This is not permitted when the subquery follows =, !=, <, <= , >, >= or when the subquery is used as an expression.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Ringkas daftar menjadi string yang dipisahkan koma

  2. Tally Table untuk memasukkan tanggal yang hilang di antara dua tanggal? SQL

  3. Triple Inner bergabung dengan lebih dari 10.000 baris dan aplikasi kios perhitungan asp

  4. Bisakah fungsi skalar diterapkan sebelum memfilter saat menjalankan Pernyataan SQL?

  5. MASUKKAN MASSAL ke dalam kolom tertentu?