我想知道检查子查询是否有一组值的最佳方法是什么。我想出了以下查询,但我认为它没有效率。
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 :(得分: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}}
如果这不能解决您的问题,那么您应该添加更多信息。