如何将表中的值与另一个表中的范围相关联?

时间:2011-02-08 22:56:36

标签: sql range sas

考虑以下简单的两个表设置:

drop table ranges;
drop table entries;

create table ranges (x integer, y integer, label varchar);
create table entries (v integer);

insert into ranges values(1, 5, "range1");
insert into ranges values(8, 10, "range2");
insert into ranges values(20, 30, "range3");

insert into entries values(0);
insert into entries values(3);
insert into entries values(8);
insert into entries values(12);
insert into entries values(23);

现在,查询

select * from entries as a, ranges as b
where a.v between b.x and b.y;

会给我

v|x|y|label
3|1|5|range1
8|8|10|range2
23|20|30|range3

也就是说,entries中不属于任何范围的值不会出现在结果中。

如何编写一个查询,为entries中的每个条目返回一行,以便我得到

v|x|y|label
0|NULL|NULL|NULL
3|1|5|range1
8|8|10|range2
12|NULL|NULL|NULL
23|20|30|range3

最好是在通用SQL中(我在SAS中使用PROC SQL)。

1 个答案:

答案 0 :(得分:2)

select * 
from entries as a
left outer join ranges as b 
  on (a.v between b.x and b.y);

我提供+1来提供合理且可用的DDL和INSERT语句。很高兴为您提供帮助。