2013-04-12 89 views
1

我使用Postgres從表中獲取結果。我想用SQL來解決問題。在SQL中:當查詢返回「無結果」時顯示一些默認結果

當我的postgresql查詢返回沒有結果時,我想要出現一些默認的行結果。我正在使用Jasper報告,因此我沒有很多工具來捕捉沒有結果的事件,然後提供默認結果。

當第一個查詢確實顯示結果時,我不希望顯示默認結果。目前我正在嘗試使用UNION,但我希望Union命令之後的第二個查詢僅在第一個查詢顯示0個結果時發生。

這可以在SQL中完成嗎?

+0

的原因,我想這樣做是因爲我用的JasperSoft的iReport的報告,我無法得到我所需要使用該程序來完成。所以我試圖訴諸SQL來滿足我的需求。 @EricLeschinski – precose

+0

您是檢索單行還是多行? –

回答

3

你可以嘗試CTE:

with fooresults as 
(
select c1, c2 from foo 
) 

select c1, c2 from fooresults 
union 
select c1, c2 from blah 
where (select count(*) from fooresults)=0 

或者你可以測試空fooresults不計數:

where not exists (select 1 from fooresults) 

PS當然,你可以添加,當你實例化CTE所需的所有條件:

 select c1, c2 from foo where .... <some conditions> 
2
SELECT * 
FROM table1 
UNION ALL 
SELECT * 
FROM table2 
WHERE 0 = (
    SELECT count(table1.id) 
    FROM Table1 
    GROUP BY table1.id) 

乘頭,感覺雖然難看......

3

不要做一個count檢查行的存在,因爲它會計算整個表。在改用exists

select c1, c2, c3 
from t 
union 
select 1, 2, 3 
where not exists (select * from t) 
+1

+1在性能方面比我的回答好。 –

+1

+1是第一個建議不存在的。 –

+1

@Erwin我很高興有人承認它。 –