Как выбрать пары из таблицы с расстоянием меньше x? - PullRequest
0 голосов
/ 08 января 2019

В моей базе данных у меня есть таблица домов. Каждый дом имеет идентификатор улицы и расстояние в метрах от начала улицы.

Я хочу найти все пары домов на одной улице, которые находятся на расстоянии менее, например, например. 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 голосов
/ 08 января 2019

Используйте самостоятельное соединение на столе 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

Проверено на этой скрипке дБ .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...