oracle 在查不到数据的情况下,怎么动态地返回一个值?

一、建表

student 表
id  name  score
1   allen  100
2   susan  90
3   ben    80

二、问题描述

- 假如我要查一个score<20的id,肯定是查不到的,此时我需要返回一个id最大的数据回去(3)。
- 我知道用NVL()可以做到 -> NVL(SUM(id), 3)id,但是会有以下问题。
- 这个表以后可能会插入新的数据,比如 4   jack   120,此时在查不到数据的情况下需要返回的就是 4。如果是这样,NVL()就要改里面的内容。
- 有没有一种写法或者函数或者什么东西,可以动态地返回我要的数据?我试了下,NVL()里没法写动态东西,比如NVL(SUM(id), select max(id) from student)id
- 或者从mybatis的角度实现也可以

请大神指教,谢谢

阅读 2.1k
1 个回答

如果score<20的数据只有一条的话,

select tt.id from (select  t.id,t.score from (
select id from student where score <20
union 
select max(id),
(select score from student s where s=(select max(id) from student))
 from student) t
order by t.score asc)tt 
where rownum=1
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题