2011-09-22 25 views
1

如果我的查詢1無法獲取結果,我需要引入一個虛擬行。在sybase查詢中引入虛擬行

select column1,column2,... from <ActualTable> Where condition='abc'... (1) 
Union 
select "dummy col1","dummy col2"..... from <dummy table> where col1 NOT IN (select column1 from 
<ActualTable> where condition = 'abc'..)        (2) 

用上面的查詢,如果查詢1取得結果查詢2將不會。如果查詢1沒有結果,那麼我會得到一個虛擬行。

是否有其他方法可以在Sybase中實現相同的結果?

回答

1

臨時表如果「ActualTable」給> 1排

select column1,column2,... INTO #temp 
from <ActualTable> 
Where condition='abc'... (1) 

IF @@ROWCOUNT = 0 
    select "dummy col1","dummy col2"..... INTO #tmp 
    from <dummy table> 

-- #temp will exist now 

INSERT #temp 
select column1,column2,... 
from <AnotherTable> 
Where condition='abc'... (1) 

IF @@ROWCOUNT = 0 
    INSERT #temp 
    select "dummy col1","dummy col2"..... 
    from <dummy table> 

... 
SELECT * FROM #tmp 
+0

ks爲快速回復傢伙。 我有類似的聯合查詢設置可能在12組左右..設置1 = 5行總是,設置2和設置3 - 每個返回1行... 選擇.... 聯合 選擇... 。 選擇.... UNION 選擇.... .... .... 對於這些怎麼樣可以使用ROWCOUNT? ROWCOUNT是否始終保持先前查詢結果的計數? – user959098

+0

@ user959098:只有前一個SELECT。並更新 – gbn

+0

謝謝,我沒有'在sybase的存儲過程中試試這個 – user959098

0

試試這個:

select top 1 * from 
(
select 0,column1,column2,... from <ActualTable> Where condition='abc'... (1) 
Union 
select 1,"dummy col1","dummy col2"..... from <dummy table> 
order by 1 
) 

如果第一次查詢成功後,你會得到它,如果沒有,那麼第二個將被退回

+0

這取決於你期望從「ActualTable」有多少行 – gbn

+0

好點,謝謝gbn,我從他期待的單行回來的問題想... – Sparky