我使用Postgres
從表中獲取結果。我想用SQL來解決問題。在SQL中:當查詢返回「無結果」時顯示一些默認結果
當我的postgresql查詢返回沒有結果時,我想要出現一些默認的行結果。我正在使用Jasper報告,因此我沒有很多工具來捕捉沒有結果的事件,然後提供默認結果。
當第一個查詢確實顯示結果時,我不希望顯示默認結果。目前我正在嘗試使用UNION,但我希望Union
命令之後的第二個查詢僅在第一個查詢顯示0個結果時發生。
這可以在SQL中完成嗎?
我使用Postgres
從表中獲取結果。我想用SQL來解決問題。在SQL中:當查詢返回「無結果」時顯示一些默認結果
當我的postgresql查詢返回沒有結果時,我想要出現一些默認的行結果。我正在使用Jasper報告,因此我沒有很多工具來捕捉沒有結果的事件,然後提供默認結果。
當第一個查詢確實顯示結果時,我不希望顯示默認結果。目前我正在嘗試使用UNION,但我希望Union
命令之後的第二個查詢僅在第一個查詢顯示0個結果時發生。
這可以在SQL中完成嗎?
你可以嘗試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>
SELECT *
FROM table1
UNION ALL
SELECT *
FROM table2
WHERE 0 = (
SELECT count(table1.id)
FROM Table1
GROUP BY table1.id)
乘頭,感覺雖然難看......
不要做一個count
檢查行的存在,因爲它會計算整個表。在改用exists
select c1, c2, c3
from t
union
select 1, 2, 3
where not exists (select * from t)
+1在性能方面比我的回答好。 –
+1是第一個建議不存在的。 –
@Erwin我很高興有人承認它。 –
的原因,我想這樣做是因爲我用的JasperSoft的iReport的報告,我無法得到我所需要使用該程序來完成。所以我試圖訴諸SQL來滿足我的需求。 @EricLeschinski – precose
您是檢索單行還是多行? –