Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 取消选择上一个选择_Sql_Sql Server 2005 - Fatal编程技术网

Sql 取消选择上一个选择

Sql 取消选择上一个选择,sql,sql-server-2005,Sql,Sql Server 2005,我不知道这听起来可能很奇怪。。。但这是我的情况。。。我必须从表1和表2中选择行 Select * from Table1 Where <SomeCondition> Select * from Table2 Where <SomeCondition> 但我的限制条件是如果Table1/Table2返回0行。。。我不应该返回任何结果 那就是。。。如果第一个select返回10行,第二个select返回0行,那么我也应该调用第一个select 临时表是唯一的解决方案,还是我

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

Select * from Table1 Where <SomeCondition>
Select * from Table2 Where <SomeCondition>
但我的限制条件是如果Table1/Table2返回0行。。。我不应该返回任何结果

那就是。。。如果第一个select返回10行,第二个select返回0行,那么我也应该调用第一个select

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

提前感谢您的回复

拉贾
一种方法是先执行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应该提供良好的性能,因为一旦找到匹配的记录,它就会停止运行。

如果没有有关特定查询的更多详细信息,下面是一个选项。只要您的查询不是太复杂,也不是很密集,这应该可以工作:

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

如果另一条语句返回的行数大于零,则只会选择每条语句中的行。

一个明显但性能不太好的解决方案是首先计算行数,但不确定语法:

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>

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

create proc pTest
as

Select * from Table1 Where <SomeCondition>

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

go

这也意味着你不需要额外的选择或数据库访问。这也可以在脚本中执行,也可以在存储过程之外执行。但这不是意味着即使第二个查询没有生成任何行,也会执行第一个查询吗…@@rowcount应该在两个选择之后,因此如果第一个查询没有得到行,则不执行第二个查询