取消选择上一个选择

时间:2010-01-29 13:05:35

标签: sql sql-server-2005

我不知道这可能听起来很奇怪......但这是我的情况......我必须从两个表(表1)和(表2)中选择行

Select * from Table1 Where <SomeCondition>
Select * from Table2 Where <SomeCondition>

但我的约束是如果Table1 / Table2返回0(零)行...我根本不应该返回任何结果。

即...如果第一个选择返回说10行而第二个选择返回0(零)行,我应该回调第一个选择...

Temp表是唯一的解决方案,还是我们还有其他选择。

提前感谢您的回复...

  • 拉加

4 个答案:

答案 0 :(得分:1)

一种方法是首先进行IF EXISTS:

IF EXISTS(SELECT * FROM Table1 WHERE....) AND EXISTS(SELECT * FROM Table2 WHERE....)
    BEGIN
        -- Now do your SELECT on each, as both return results
    END

EXISTS应该提供良好的性能,因为它会在找到匹配的记录后立即停止。

答案 1 :(得分:0)

如果没有您特定查询的更多详细信息,可以选择此选项。只要您的查询不是太复杂而不是非常密集,这应该有效:

Select * from Table1 Where <SomeCondition>
where exists( Select null from Table2 Where <SomeCondition> );
Select null from Table2 Where <SomeCondition>
where exists ( Select null from Table1 Where <SomeCondition> );

如果另一个语句也会返回大于零的任意行数,那么这只会在每个语句中选择行。

答案 2 :(得分:0)

一个明显但不那么高效的解决方案是首先count行数(不确定语法):

if not exists(select id from Table1 where ...) or not exists(select id from Table1 where ...)
    return

Select * from Table1 Where <SomeCondition>
Select * from Table2 Where <SomeCondition>

答案 3 :(得分:0)

如果可以使用存储过程,可以使用@@ rowcount检查第二个查询是否返回任何结果:

create proc pTest
as

Select * from Table1 Where <SomeCondition>

Select * from Table2 Where <SomeCondition>
if @@rowcount = 0 return

go