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



这里有两个表:

--Table A
id
1
4
7
--Table B
id
3
8
11
13

我打算实现的是将表Aid列上的B连接起来,其中右键的值是大于左键的最小值。例如,表 A 中的id=1应与表 B 中的id=3联接。同样,表 A 中的 id=4id=7 都应与表 B 中的id=8联接。有没有在postgresql中实现这一点的好方法?谢谢!

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

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;

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

最新更新