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; Cats và Dogs
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 .