Я пытаюсь создать простой запрос с inner lateral join
, но я хочу ограничить объединение одним результатом в подзапросе
select b.`CODE`
from foo.bar.`BRANCH` b
inner join lateral (
select branch_id
from foo.bar.`BRANCH_DISTANCE`
where branch_id=b.CODE
and distance < 100
limit 1
) on true
Таблица BRANCH_DISTANCE
содержит расстояния между любыми двумя ветвями, и я хочу вернуть все ветви, которые находятся в пределах 100 km
другой ветки, поэтому в подзапросе, если есть одна запись, которая содержит ветвь и его расстояние меньше 100, оно должно вернуть ответвление (и прекратить поиск дальнейших совпадений).
Но когда я добавляю ограничение, запрос возвращает только одну запись. При снятии лимита возвращается около 2000 записей.
Если я заменим select b.CODE
на select distinct b.CODE
, получится около 500 результатов (это правильный ответ).
Моя цель состоит в том, чтобы не использовать ключевое слово distinct
в операторе выбора, и поэтому я добавил ограничение в подзапросе, чтобы объединение выполнялось не для каждой записи в таблице BRANCH_DISTANCE
, содержащей ветвь код и расстояние <100 (поскольку ветвь может быть на расстоянии менее 100 км от более чем одной ветки). </p>