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)
)

如果有人可以为我提供更好的解决方案,我将不胜感激。

谢谢

4

1 回答 1

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:阅读上述评论后,我认为您应该以某种方式SomeTable使用Table2公共列加入:

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)

如果这不能解决您的问题,那么您应该添加更多信息。

于 2013-08-05T06:35:17.687 回答