选择id在多个范围内的行

时间:2016-06-30 11:15:39

标签: postgresql

我有下表postcode_ranges

id | city_id | from |   to
---------------------------
 1 |       1 | 1000 | 1999
 2 |       1 | 2000 | 2000
 3 |       1 | 2030 | 2050
 4 |       2 | 1000 | 1000
 5 |       5 | 4300 | 4400
 6 |       6 | 9000 | 9900

city_idproperties表的外键,其中包含postcode_digits列。

现在,我希望能够选择属于某个城市的所有属性。这意味着当有人选择id = 1的城市时,properties表中的所有行都应该选择postcode_digits列为1000和1999,或2000和2000(当在查询中自动化,或在2030年到2050年之间。

如果可能的话,我想在一个简洁的查询中完成这一切,但我并不完全知道如何实现这一目标。

2 个答案:

答案 0 :(得分:0)

您是否只想要join where

select p.*
from properties p join
     postcode_ranges pr
     on p.postcode between p."from" and p."to"
where pr.city_id = 1;

答案 1 :(得分:0)

SELECT * 
    FROM properties 
        INNER JOIN postcode_ranges 
        ON postcode_ranges.city_id = properties.city_id 
            AND properties.postcode >= postcode_ranges.from 
            AND properties.postcode <= postcode_ranges.to
    WHERE postcode_ranges.city_id = 1