2013-04-02 47 views
1

我有一個SQL語句SELECT * FROM table1 WHERE ....; SELECT * FROM table2 WHERE ....兩個SQL語句,如果沒有結果,忽略第一個返回的結果?

我要的是從第一個SELECT語句得到的結果,如果它返回的結果,但如果沒有,我想忽略它,只是得到第二結果選擇語句。有沒有一種方法可以使用SQL來完成這項工作?

我得到這個返回給我作爲一個數據表,使用dataadapter來填充上述SQL語句中的數據表。我不能改變那部分,或者切換到填充數據集(出於我不會涉及的原因,但它不能改變)。

回答

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 */) 
+0

我喜歡這個,你可以檢查數第一,但這兩個語句不會總是返回類似的結果,這使得我受限於第一個select語句返回的列。 – cost

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;