2011-02-08 8 views
2

次の簡単な2つのテーブルのセットアップ考えてみましょう:テーブルの値を別のテーブルの範囲と関連付けるにはどうすればよいですか?

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内の値であります結果の中には表示されません。

は、どのように私は私が(私はSASでPROC SQLを使用しています)は、好ましくは、一般的なSQLに

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

を得るようにentries内の各エントリの行を返しますクエリを書くことができます。

答えて

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

わかりやすく使用可能なDDLおよびINSERTステートメントを提供してくれた私からの+1。あなたを助けてくれることは喜ばしいことです。

+0

私の心が落ち着くのを助けてくれてありがとう。なぜか分からないけど、私はたくさんの曲がりくねって、「外側の結合」を忘れていた。 –

関連する問題