我想知道检查子查询是否具有一组值的最佳方法是什么。我想出了以下查询,但我认为它效率不高。
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)
)
如果有人可以为我提供更好的解决方案,我将不胜感激。
谢谢
我想知道检查子查询是否具有一组值的最佳方法是什么。我想出了以下查询,但我认为它效率不高。
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)
)
如果有人可以为我提供更好的解决方案,我将不胜感激。
谢谢
我会使用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)
如果这不能解决您的问题,那么您应该添加更多信息。