当你查询一张表不确定通过条件查询后,只需要返回一条数据的时候,但是你不确定是不是会直接返回的空数据的时候,可以使用这么个思路:
原创地址:https://blog.csdn.net/QQ826688096/article/details/89182210
思路是:
- 使用条件查询你该查询的数据;
- 然后 union all 同样的字段个数,返回默认的值,如,都返回“0”;
- 因为这样操作会导致本来会查出一条结果的数据的sql,现在变成了会返回一条或者两条数据了,所以,你需要取其中的一条,这里就可以使用手段了;
- 让两条sql的查询列表都加上一个字段,比如叫“paixu”,然后,把自己真正需要返回的那个sql查询列表里面加入“‘1’ as paixu”;把union all的那个sql查询列表里面加入**“‘0’ as paixu”
- 然后在外层再套一层查询,让其按照**“排序”**字段进行倒序(因为如果你的查询条件能查询出数据的时候,他的paixu的值是1,没有值的时候就是union all的结果了,就是0,所以得倒序);
- 然后再再外层套一层,用于使用oracle函数rownum=1,来取第一条数据。(这里之所以这么写,是因为oracle的函数rownum的取值,不是很稳定,加了个paixu字段后,可以确保paixu=1的一定会在第一个)。
- 这样就可以保证,不管会不会查询出结果,结果都会返回一条数据的。
select a.xh,a.xm,a.xb from (
select * from (
select case when t.xh='1' then '1' else '0' end xh,
case when t.xm='1' then '1' else '0' end xm,
case when t.xb ='1' then '1' else '0' end xb,
'1' as paixu
from demoTable t where t.xh='10086'
union all
select '0' as xh,'0' as xm,'0' as xb,'-1' as paixu from dual
)t order by t.paixu desc
)a
where rownum=1;
这样写的结果就是,当通过查询条件没有查询出数据后,会返回一条xh,xm,xb的值都是 ‘0’ 的一条数据。这样服务端代码就会好判断多了。
当然,我只是有这种想法,要实现这种效果的思路千千万,不要喷,开心就好。2019年4月10日