在我的数据库中,有一张房屋表。每栋房屋都有一条街道编号,距离街道起点的距离以米为单位。
我想查找同一条街上所有距离小于(例如)的房屋彼此相距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数据库的正确语法是什么?
答案 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中进行了测试。