Sql-Server

檢查任何值是否在子查詢結果中

  • December 19, 2016

我有一個複雜的子查詢,它返回一個訂單 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。

引用自:https://dba.stackexchange.com/questions/98419