这里有两个表:
--Table A
id
1
4
7
--Table B
id
3
8
11
13
我打算实现的是将表A
与id
列上的B
连接起来,其中右键的值是大于左键的最小值。例如,表 A
中的id=1
应与表 B
中的id=3
联接。同样,表 A
中的 id=4
和 id=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;
注意:您的问题说"大于",所以这就是答案的实现。 通常在这种情况下,我会期望"大于或等于"。 查询的调整是微不足道的。