1

我有一个sql语句SELECT * FROM table1 WHERE ....; SELECT * FROM table2 WHERE ....

我想要的是从第一个 select 语句中获取结果,如果它返回结果,但如果没有,我想忽略它并从第二个 select 语句中获取结果。有没有办法只使用 SQL 来做到这一点?

我将它作为数据表返回给我,使用数据适配器从上述 SQL 语句中填充数据表。我无法更改该部分,或切换到填充数据集(出于我不会进入的原因,但无法更改)。

4

2 回答 2

3

假设两个查询都返回相同数量和类型的列,一种方法是:

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 */)
于 2013-04-02T18:29:24.827 回答
0

几个选项。您可以先检查计数:

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;
于 2013-04-02T18:34:46.540 回答