Oracle:VLOOKUP等价

Sab*_*eti 6 sql oracle vlookup

我有这样的观点:

col_1  col_2  my_date
-----  -----  -------
1      5      2011
2      6      2014
3      7      2012
4      8      2011
Run Code Online (Sandbox Code Playgroud)

和这样的表:

date_1  date_2  the_value
------  ------  ---------
2010    2012    v1
2013    2015    v2
Run Code Online (Sandbox Code Playgroud)

我想要像Excel VLOOKUP函数那样找到介于和之间的value(the_value),所以我可以得到这样的结果:my_datedate_1date_2

col_1  col_2  my_date  the_value
-----  -----  -------  ---------
1      5      2011     v1
2      6      2014     v2
3      7      2012     v1
4      8      2011     v1
Run Code Online (Sandbox Code Playgroud)

日期列的类型是DATE.为简单起见,这些是样本数据.

a_h*_*ame 8

这是SQL中的连接,between而不是相等的连接条件.

select t1.col_1, t1.col_2, t1.my_date, t2.the_value
from table_one t1
  join table_two t2 on t1.my_date between t2.date_1 and t2.date_2;
Run Code Online (Sandbox Code Playgroud)

需要注意的是between 包括边界所以它也将返回行,其中my_date2010.如果你不希望出现这种情况,你需要使用一个连接条件与><:

select t1.col_1, t1.col_2, t1.my_date, t2.the_value
from table_one t1
  join table_two t2 on t1.my_date > t2.date_1 
                   and t1.my_date < t2.date_2;
Run Code Online (Sandbox Code Playgroud)

这也要求你的"日期"范围不重叠,否则你会得到一些奇怪的结果.