考虑以下简单的两个表设置:
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
)。
答案 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语句。很高兴为您提供帮助。