2013-08-05 52 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) 

如果这没有解决您的问题,那么你应该增加更多的相关信息。

相关问题