我有一个sql语句SELECT * FROM table1 WHERE ....; SELECT * FROM table2 WHERE ....
我想要的是从第一个 select 语句中获取结果,如果它返回结果,但如果没有,我想忽略它并从第二个 select 语句中获取结果。有没有办法只使用 SQL 来做到这一点?
我将它作为数据表返回给我,使用数据适配器从上述 SQL 语句中填充数据表。我无法更改该部分,或切换到填充数据集(出于我不会进入的原因,但无法更改)。
我有一个sql语句SELECT * FROM table1 WHERE ....; SELECT * FROM table2 WHERE ....
我想要的是从第一个 select 语句中获取结果,如果它返回结果,但如果没有,我想忽略它并从第二个 select 语句中获取结果。有没有办法只使用 SQL 来做到这一点?
我将它作为数据表返回给我,使用数据适配器从上述 SQL 语句中填充数据表。我无法更改该部分,或切换到填充数据集(出于我不会进入的原因,但无法更改)。
假设两个查询都返回相同数量和类型的列,一种方法是:
select * from table1 where ... /* query 1 conditions */
union all
select * from table2 where ... /* query 2 conditions */
and not exists
(select 1 from table1 where ... /* query 1 conditions */)
几个选项。您可以先检查计数:
If (select count(*) from table1 where...) > 0
begin
select * from table1 where...
end
else
begin
select * from table2 where...
end;
如果两个结果集的结构相同,则可以使用临时表保存计数检查(从而提高性能):
create table #temp (col1 int, col2 varchar(10), ...);
insert #temp
select * from table1 where...;
if @@rowcount = 0
begin
insert #temp
select * from table2 where...
end;
select * from #temp;