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

Truy vấn trong đó hai cột là kết quả của truy vấn lồng nhau

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,5x.x = 2x.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



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. CAST () so với TRY_CAST () trong SQL Server:Sự khác biệt là gì?

  2. 3 cách để lấy ngôn ngữ của phiên hiện tại trong SQL Server (T-SQL)

  3. Tôi có thể sử dụng một luồng để CHÈN hoặc CẬP NHẬT một hàng trong SQL Server (C #) không?

  4. Làm thế nào để chèn dữ liệu nếu không ở giữa trong sql server 2008?

  5. Làm cách nào để căn chỉnh trường varchar ở bên phải trong TSQL?