Thực ra là không, không có cách nào thông minh hơn để viết điều này (mà không cần truy cập Y hai lần) với X mà myTable.X và myTable.YY khớp với có thể không ở cùng một hàng.
Thay vào đó, dạng EXISTS của truy vấn là
select *
from myTable A
where exists (select * from Y where A.X = Y.X)
and exists (select * from Y where A.XX = Y.X)
Nếu Y chứa các giá trị X là 1,2,3,4,5
và x.x = 2
và x.xx = 4
, cả hai đều tồn tại (trên các bản ghi khác nhau trong Y) và bản ghi từ myTable sẽ được hiển thị trong đầu ra.
CHỈNH SỬA:Câu trả lời này trước đây đã nêu rằng You could rewrite this using _EXISTS_ clauses which will work faster than _IN_
. AS Martin đã chỉ ra, điều này không đúng (chắc chắn không đúng với SQL Server 2005 trở lên). Xem các liên kết
- http://explainextended.com/2009 / 06/16 / in-vs-join-vs-being /
- http://sqlinthewild.co .za / index.php / 2009/08/17 / being-vs-in /