2013-08-05 53 views
1

我想知道檢查子查詢是否有一組值的最佳方法。我想出了下面的查詢,但我不認爲它有效。檢查結果集是否具有特定值

SELECT * FROM SomeTable 
WHERE 
(
    2 IN (SELECT OptionId FROM Table2 WHERE Table2_Id = 1) AND 
    3 IN (SELECT OptionId FROM Table2 WHERE Table2_Id = 1) 
) 

我很感激任何人都可以爲我提供更好的解決方案。

感謝

+0

您的查詢將eather返回沒有行或所有行。也許你應該描述你需要的什麼 –

+0

假設我有一個可以有一些選項的實體,我想獲得至少有指定選項的實體(在這個示例2和3中)。 – mrtaikandi

+0

無論您放入哪個數字來替換2和3.您將從Sometable中獲取所有行或無行。我相信你需要一個不同的結果。描述你需要什麼以及SomeTable和Table2之間的關係 –

回答

2

我會用EXISTS子查詢:

SELECT * FROM SomeTable 
WHERE EXISTS (SELECT * FROM Table2 WHERE Table2_Id = 1 AND OptionId = 2) 
AND EXISTS (SELECT * FROM Table2 WHERE Table2_Id = 1 AND OptionId = 3) 

如果您有以下指標(Table2_Id,OptionId)的一個或(OptionId,Table2_Id)那麼你不應該有關於業績的擔憂。

編輯1:閱讀上述評論後,我想你應該加入某種方式SomeTableTable2使用公共列這樣的:

SELECT * FROM SomeTable x 
WHERE EXISTS (SELECT * FROM Table2 y WHERE y.Table2_Id = 1 AND y.OptionId = 2 AND x.CommonColumn = y.CommonColumn) 
AND EXISTS (SELECT * FROM Table2 y WHERE y.Table2_Id = 1 AND y.OptionId = 3 AND x.CommonColumn = y.CommonColumn) 

如果這沒有解決您的問題,那麼你應該增加更多的相關信息。

相關問題