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

<> so với KHÔNG VÀO

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

kiểm tra bất kỳ giá trị nào trong danh sách.

Tuy nhiên, NOT IN không chịu được NULL. Nếu truy vấn con trả về một tập hợp giá trị chứa NULL, thì không có bản ghi nào được trả về. (Điều này là do bên trong NOT IN được tối ưu hóa thành idcode <> 'foo' AND idcode <> 'bar' AND idcode <> NULL v.v., điều này sẽ luôn không thành công vì bất kỳ so sánh nào với NULL đều mang lại KHÔNG BIẾT, ngăn toàn bộ biểu thức không bao giờ trở thành ĐÚNG.)

Một biến thể đẹp hơn, có khả năng chịu NULL sẽ là:

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

CHỈNH SỬA:Ban đầu tôi cho rằng điều này:

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

sẽ chỉ kiểm tra giá trị đầu tiên. Nó chỉ ra rằng giả định này ít nhất là sai đối với SQL Server, nơi nó thực sự gây ra lỗi của anh ấy:

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. Có cách nào để chỉ định nhiều Lược đồ SQL Server 2008 cho lệnh 'createChangeLog' của Liquibase không?

  2. Cách nhập tệp bak vào SQL Server Express

  3. Cách duy trì cột GEOMETRY hoặc GEOGRAPHY được tính toán

  4. Sử dụng SqlDependency với Hàng đợi được đặt tên

  5. Chuyển đổi varchar thành uniqueidentifier trong SQL Server