Postgresql:在大于左列的最小值处联接另一列

lokaqttq  于 2023-03-29  发布在  PostgreSQL
关注(0)|答案(1)|浏览(97)

这里有两个表:

--Table A

id
1
4
7

--Table B
id
3
8
11
13

我打算实现的是在id列上连接表AB,其中right键的值是大于left键的最小值。例如,表A中的id=1应该连接表B中的id=3。同样,表A中的id=4id=7都应该与表B中的id=8连接。有没有好的方法在postgresql中实现这个?谢谢!

pbossiut

pbossiut1#

查找键的一种方法是相关子查询:

select a.*,
       (select min(b.id)
        from b
        where b.id > a.id
       ) as b_id
from a;

如果需要b中的其他列,可以将其连接回b或使用横向连接:

select a.*, b.*
from a left join lateral
     (select b.*
      from b
      where b.id > a.id
      order by b.id
      fetch first 1 row only
     ) b on true;

注意:你的问题说“大于”,所以这就是答案所实现的。通常在这些情况下,我会期望“大于或等于”。查询的调整是微不足道的。

相关问题