如何从距离小于x的表中选择对?

时间:2019-01-07 23:27:48

标签: sql postgresql

在我的数据库中,有一张房屋表。每栋房屋都有一条街道编号,距离街道起点的距离以米为单位。

我想查找同一条街上所有距离小于(例如)的房屋彼此相距20米。

这是一个名为HOUSES

的示例表
house_id  street_id  distance_from_beginning
1         100        5
2         100        10
3         100        15
4         200        5
5         200        20
6         200        10

我正在搜索看起来像这样的SQL语句

SELECT 
    h1.house_id, 
    h2.house_id, 
    abs(h1.distance_from_beginning - h2.distance_from_beginning) distance
from HOUSES h1, h2 
where h1.street_id=h2.street_id and distance < 20

这可能吗? PostgreSQL数据库的正确语法是什么?

1 个答案:

答案 0 :(得分:3)

在房屋位于同一条街道的HOUSE桌上使用自联接:

SELECT 
    h1.house_id, h2.house_id, ABS(h1.distance - h2.distance)
FROM 
    HOUSES h1
    INNER JOIN HOUSES h2 
        ON  h1.street_id = h2.street_id 
        AND h1.house_id < h2.house_id
        AND ABS(h1.distance - h2.distance) < 20

this db fiddle中进行了测试。