我正在尝试查询表以首先找到与列的完全匹配, 如果比赛失败;选择范围内最近的一个。
例如
TestTable的
id width cost
1 10.2 100
2 10.5 200
3 10.1 50
Select * from testTable where width = 10.3;
如果没有记录返回,我想去10.1到10.9范围内最近的那个。
EDIT1:它是Oracle;更新了标签
答案 0 :(得分:3)
在大多数数据库中,您可以执行以下操作:
Select *
from testTable
order by abs(width - 10.3)
fetch first 1 row only;
某些数据库可能会使用limit
,top
甚至where rownum = 1
,但这个想法是一样的。
答案 1 :(得分:1)
你会写这样的东西:
select * from (
Select * from testTable where width = 10.3
union
Select * from testTable where width > 10.1 and width < 10.9
order by abs (10.3 - width) asc
) T LIMIT 1
是的,它可以减少到Gordon Linoff显示的
Select * from testTable where width > 10.1 and width < 10.9
order by abs (10.3 - width) asc
LIMIT 1