将数字列表分配给一组范围

时间:2015-05-07 16:35:45

标签: sql oracle

假设我有3种不同的ZIP

91000
91200
91500

我有3个不同的范围

91000 - 91199
91200 - 91499
91500 - 95000
95001 - 96000

如何撰写帮助我将邮政编码分配到相应范围的查询?问题是我的邮政编码来自表A,我需要在表B中查找zip,但表B只包含范围,而不是实际的ZIP。所以我不能在表A和B之间进行连接。

我尝试了以下但是它没有用。非常感谢!

select * from data.zip a
where (select zip_cd from data.mkt_zip b
where zip_cd in ('91000','91200','91500')) between from_zip_cd and to_zip_cd

2 个答案:

答案 0 :(得分:0)

SELECT column_name(s)
FROM table_name
WHERE column_name BETWEEN value1 AND value2;

你的语法错了。

查看SQL BETWEEN运算符here

答案 1 :(得分:0)

您需要使用正确的连接条件join这两个表:

select a.zip_cd, b.from_zip_cd, b.to_zip_cd
  from zip a
  join mkt_zip b on a.zip_cd between b.from_zip_cd and b.to_zip_cd

输出:

ZIP_CD FROM_ZIP_CD  TO_ZIP_CD
------ ----------- ----------
91000        91000      91199 
91200        91200      91499 
91500        91500      95000 

SQLFiddle demo

当然,您可以在where子句中使用其他过滤器,或者在join条件下使用

select a.zip_cd, b.from_zip_cd, b.to_zip_cd
  from zip a
  join mkt_zip b on a.zip_cd between b.from_zip_cd and b.to_zip_cd
  where a.zip_cd in ('91000', '91500')


select a.zip_cd, b.from_zip_cd, b.to_zip_cd
  from zip a
  join mkt_zip b on a.zip_cd between b.from_zip_cd and b.to_zip_cd
                and a.zip_cd in ('91000', '91500')