![](https://img-blog.csdnimg.cn/img_convert/52b066e1a9c0a536ea054867b87e5bce.png)
背景:项目开发中,有中业务场景需要,查询结果如果大于等于一条时,正常返回,如果查询结果为空,则需要返回一条默认的数据。所以需要对sql进行优化修改
数据库:Oracle11g
with with_t1 as (select TK.BZJ as QYID,
T.QYMC as S_ZCSQRMC,
T.ZCDZ as S_ZSDZ,
T.SCDZ as S_SCDZ,
TK.YLQXSCQYXKZH as S_YLQXSCQYXKZH,
T.FRXM as S_FDDBR,
T.FRSJ as S_FRSJ
FROM xzxk_elylqxcp_wtqy T,
XZXK_YLQXGFJC_SQ TK
WHERE T.BZJ = TK.BZJ
AND T.SQID = '90918cacdbed4053a1c593f2ba88e838'),
blank_t1 as (select null as QYID,
null as S_ZCSQRMC,
null as S_ZSDZ,
null as S_SCDZ,
null as S_YLQXSCQYXKZH,
null as S_FDDBR,
null as S_FRSJ
from dual)
select *
from (select * from with_t1 union all select * from blank_t1)
where rownum <= decode((select count(*) from with_t1), 0, 1, (select count(*) from with_t1));
写法思路:创建一个虚拟默认表blank_t1只有一条默认的数据,然后将此表blank_t1和主查询结果表with_t1拼接union all到一个新表中。然后新增where条件如果主表with_t1数据量如果是0条时获取一条数据,否则获取主表的数据量相同的条数数据。
补充:记得postgreSQL数据库是可以查询结果为空时默认返回一条全为空的数据,还需验证。