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

SQL - không hiển thị hàng khi hai tiêu chí được đáp ứng

Điều này là do cách NOT IN làm. Nếu bất kỳ giá trị nào trong danh sách là NULL thì nó sẽ không trả về kết quả. ví dụ:

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

Sẽ không trả về kết quả nào và không phải là 3.

Nếu bạn mở rộng ví dụ thành câu lệnh OR tương đương, bạn sẽ thấy lý do tại sao:

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

Kể từ 3 != NULL Đánh giá thành false vì không có gì bằng NULL, câu lệnh trả về false.

Bạn có thể đạt được kết quả cần thiết theo 3 cách.

1) Sử dụng ELSE trong trường hợp của bạn tuyên bố để đảm bảo không có NULL kết quả

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

2) Thay đổi IN không bằng nhau, vì dù sao câu lệnh trường hợp của bạn cũng sẽ chỉ trả về 1 giá trị

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

3) Sửa đổi logic của bạn, điều này có thể được viết lại thành

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. Thứ tự thực thi câu lệnh SQL Server

  2. Làm cách nào để bật quyền trong chia sẻ thư mục FileTable của SQL Server 2012?

  3. Tại sao khôi phục không hoạt động cho bảng biến trong SQL Server 2012?

  4. So sánh chuỗi phân biệt chữ hoa chữ thường trong SQL

  5. SQL - không hiển thị hàng khi hai tiêu chí được đáp ứng