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

SQL Server BẤT KỲ Người khai thác nào được giải thích

Trong SQL Server, bạn có thể sử dụng ANY toán tử logic để so sánh một giá trị vô hướng với một tập hợp giá trị cột đơn được trả về bởi một truy vấn con.

Nó có thể được sử dụng với các truy vấn con có tập hợp kết quả là một cột.

ANY toán tử tương đương với SOME toán tử logic.

Ví dụ

Giả sử chúng ta có hai bảng; CatsDogs

Mèo

+---------+-----------+
| CatId   | CatName   |
|---------+-----------|
| 1       | Meow      |
| 2       | Fluffy    |
| 3       | Scratch   |
+---------+-----------+

Chó

+---------+-----------+
| DogId   | DogName   |
|---------+-----------|
| 1       | Fetch     |
| 2       | Fluffy    |
| 3       | Wag       |
+---------+-----------+

Bây giờ chúng ta hãy chạy một truy vấn con bằng ANY nhà điều hành.

SELECT 
    CatId,
    CatName
FROM Cats c 
WHERE c.CatName = ANY (SELECT DogName FROM Dogs);

Kết quả:

+---------+-----------+
| CatId   | CatName   |
|---------+-----------|
| 2       | Fluffy    |
+---------+-----------+

ANY so với SOME

Chúng tôi sẽ nhận được kết quả tương tự nếu chúng tôi thay đổi truy vấn xung quanh để nó sử dụng SOME toán tử thay vì ANY .

Ở đây nó đang sử dụng SOME toán tử thay vì ANY .

SELECT 
    CatId,
    CatName
FROM Cats c 
WHERE c.CatName = SOME (SELECT DogName FROM Dogs);

Kết quả:

+---------+-----------+
| CatId   | CatName   |
|---------+-----------|
| 2       | Fluffy    |
+---------+-----------+

ANY so với IN

Chúng tôi cũng có thể sử dụng IN toán tử để nhận được cùng một kết quả.

SELECT 
    CatId,
    CatName
FROM Cats c 
WHERE c.CatName IN (SELECT DogName FROM Dogs);

Kết quả:

+---------+-----------+
| CatId   | CatName   |
|---------+-----------|
| 2       | Fluffy    |
+---------+-----------+

ANY so với EXISTS

Chúng tôi có thể làm điều tương tự với EXISTS nhà điều hành.

SELECT 
    CatId,
    CatName
FROM Cats c 
WHERE EXISTS (SELECT DogId, DogName FROM Dogs d
WHERE c.CatName = d.DogName);

Kết quả:

+---------+-----------+
| CatId   | CatName   |
|---------+-----------|
| 2       | Fluffy    |
+---------+-----------+

Lỗi 116?

Nếu bạn gặp lỗi 116 khi sử dụng ANY , có thể là do bạn đang chọn nhiều cột trong truy vấn con của mình. ANY toán tử chỉ có thể được sử dụng với các truy vấn con có tập hợp kết quả là một cột.

Dưới đây là một ví dụ về cách chúng tôi có thể gây ra lỗi này.

SELECT 
    CatId,
    CatName
FROM Cats c 
WHERE c.CatName = ANY (SELECT * FROM Dogs);

Kết quả:

Msg 116, Level 16, State 1, Line 5
Only one expression can be specified in the select list when the subquery is not introduced with EXISTS.

Theo nghĩa này, ANY toán tử tương tự hơn với IN so với toán tử EXISTS nhà điều hành. Chúng tôi sẽ gặp lỗi tương tự với IN .

Nếu bạn phải trả về nhiều cột trong truy vấn con của mình, hãy sử dụng EXISTS .


  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ách bỏ tất cả các Ràng buộc Mặc định trong Cơ sở dữ liệu SQL Server - Hướng dẫn SQL Server / TSQL Phần 94

  2. Cách thêm cột nhận dạng vào bảng bằng TSQL và GUI trong SQL Server - Hướng dẫn SQL Server / T-SQL Phần 40

  3. Hàm so với Thủ tục được lưu trữ trong SQL Server

  4. Giá trị ngẫu nhiên cho cột DATETIME

  5. Việc cắt bớt SQL Server và giới hạn 8192