我使用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
您是检索单行还是多行? –