取消选择以前选择
问题描述:
我不知道这可能听起来不可思议......但这里是我的情况。我必须从两个表(表1)和(表2)选择行取消选择以前选择
Select * from Table1 Where <SomeCondition>
Select * from Table2 Where <SomeCondition>
但我的约束是如果Table1/Table2返回0(零)行...我不应该返回任何结果。
,IE浏览器...如果第一次选择回报说10行,第2个选择返回0(零)行,我应该叫回第一也选择...
是临时表的唯一解决方案,或者我们有其他的选择吗?
预先感谢您的答复...
- 拉贾
答
一种方法是做一个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>);
在每个语句这只会选择行如果其他语句也将返回任何的行数大于零。
答
一个明显的,但没有如此高性能的解决方案将是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>
答
如果您可以使用存储过程,你可以使用@@ ROWCOUNT检查如果第二个查询返回任何结果:
create proc pTest
as
Select * from Table1 Where <SomeCondition>
Select * from Table2 Where <SomeCondition>
if @@rowcount = 0 return
go
非常感谢你 – 2010-01-29 13:21:12