我不知道这可能听起来很奇怪......但这是我的情况......我必须从两个表(表1)和(表2)中选择行
Select * from Table1 Where <SomeCondition>
Select * from Table2 Where <SomeCondition>
但我的约束是如果Table1 / Table2返回0(零)行...我根本不应该返回任何结果。
即...如果第一个选择返回说10行而第二个选择返回0(零)行,我应该回调第一个选择...
Temp表是唯一的解决方案,还是我们还有其他选择。
提前感谢您的回复...
答案 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