0

我正在尝试使用 a 创建一个简单的查询,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.CODEselect distinct b.CODE得到大约 500 个结果(这是正确的答案)。

我的目标是不在distinctselect 语句中使用关键字,这就是为什么我在子查询中添加限制,以便不会对BRANCH_DISTANCE包含分支代码和距离 < 100 的表中的每条记录进行连接(因为它是一个分支可能与多个分支之间的距离小于 100 公里)。

4

1 回答 1

0

当连接发生在具有重复值的列上时,连接可能会乘以结果行数(在这一列中,或者 branch_id 和 b.CODE 列都有重复值)。

要将连接限制为子查询中的单个结果,请使用 IN 子句。所以这样的事情应该按预期工作:

select b.`CODE`
from foo.bar.`BRANCH` b
where b.`CODE` in (
   select branch_id
   from foo.bar.`BRANCH_DISTANCE`
   and distance < 100
)
于 2019-06-18T16:36:12.100 回答