Sql-Server
檢查任何值是否在子查詢結果中
我有一個複雜的子查詢,它返回一個訂單 ID 列表。我需要得到一份有這些訂單的客戶名單。問題是有兩種方法可以將客戶分配給訂單(兩個欄位之一)。我可以做這樣的事情:
select * from Customers where orderId in (select...) or secondaryOrderId in (select ...)
問題是子查詢非常龐大,無論是在執行時間上,還是在螢幕空間上。有沒有辦法檢查其中一個欄位是否包含所需的結果之一?
嘗試:
where exists (select * .... where Customers.orderId = ... or Customers.secondaryId = ... )
例如,如果您打算:
where orderId in (select value from ...) or secondaryorderid in (select value from ...)
然後,您只需呼叫一次子查詢,並將 OR 子句建構到其中。
where exists (select * from ... where Customers.orderId = value or Customers.secondaryOrderId = value )
這樣做的重點是確保複雜的子查詢只執行一次。這不會發生在 CTE 中,或者用兩個 EXISTS 替換兩個 IN。