这里有两个表:
--Table A id 1 4 7 --Table B id 3 8 11 13
我打算实现的是在id列上连接表A和B,其中right键的值是大于left键的最小值。例如,表A中的id=1应该连接表B中的id=3。同样,表A中的id=4和id=7都应该与表B中的id=8连接。有没有好的方法在postgresql中实现这个?谢谢!
id
A
B
id=1
id=3
id=4
id=7
id=8
pbossiut1#
查找键的一种方法是相关子查询:
select a.*, (select min(b.id) from b where b.id > a.id ) as b_id from a;
如果需要b中的其他列,可以将其连接回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;
注意:你的问题说“大于”,所以这就是答案所实现的。通常在这些情况下,我会期望“大于或等于”。查询的调整是微不足道的。
1条答案
按热度按时间pbossiut1#
查找键的一种方法是相关子查询:
如果需要
b
中的其他列,可以将其连接回b
或使用横向连接:注意:你的问题说“大于”,所以这就是答案所实现的。通常在这些情况下,我会期望“大于或等于”。查询的调整是微不足道的。