检查结果集是否具有特定值

时间:2013-08-05 06:15:39

标签: tsql sql-server-ce-4

我想知道检查子查询是否有一组值的最佳方法是什么。我想出了以下查询,但我认为它没有效率。

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

如果有人能为我提供更好的解决方案,我感激不尽。

由于

1 个答案:

答案 0 :(得分: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)

{{1}}

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