在一次调用中组合两个Select语句

时间:2017-06-27 19:41:06

标签: oracle

我正在尝试查询表以首先找到与列的完全匹配, 如果比赛失败;选择范围内最近的一个。

例如

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;更新了标签

2 个答案:

答案 0 :(得分:3)

在大多数数据库中,您可以执行以下操作:

Select *
from testTable
order by abs(width - 10.3)
fetch first 1 row only;

某些数据库可能会使用limittop甚至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