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

SQL - jangan tampilkan baris ketika dua kriteria terpenuhi

Ini karena cara NOT IN bekerja. Jika salah satu nilai dalam daftar adalah NULL maka tidak akan ada hasil. misalnya

SELECT  [TestColumn] = 3
WHERE   3 NOT IN (1, 2, NULL)

Tidak akan mengembalikan hasil, dan bukan 3.

Jika Anda memperluas contoh ke dalam pernyataan OR yang setara, Anda akan melihat alasannya:

WHERE   3 != 1
AND     3 != 2
AND     3 != NULL

Sejak 3 != NULL Mengevaluasi menjadi false karena tidak ada yang sama dengan NULL, pernyataan mengembalikan false.

Anda dapat mencapai hasil yang diperlukan dengan 3 cara.

1) Gunakan ELSE dalam pernyataan kasus Anda untuk memastikan tidak ada NULL hasil

SELECT  OrderNumber, Client, Product
FROM    Orders
WHERE    Product not in(CASE WHEN client = 'client_a' and product = 'product_1' THEN Product ELSE '' END)

2) Ubah IN tidak sama, karena pernyataan kasus Anda hanya akan mengembalikan 1 nilai

SELECT  OrderNumber, Client, Product 
FROM    Orders
WHERE   Product != (CASE WHEN client = 'client_a' and product = 'product_1' THEN Product END)

3) Perbaiki logika Anda, ini dapat ditulis ulang sebagai

SELECT  OrderNumber, Client, Product 
FROM    Orders
WHERE   NOT (Product = 'product_1' AND Client = 'Client_a')


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Hitung Jumlah Nilai Kemunculan Berturut-turut pada Tabel

  2. Kode VBA untuk Menambahkan Tabel Tertaut dengan Kunci Utama

  3. Bagaimana saya bisa mengatur ekspresi ke properti FileSpec di Foreach File enumerator?

  4. Sintaks GRANT untuk domain\pengguna

  5. Cara Memindahkan File Data di SQL Server – Bagian 1