2017-11-11 112 views
0

我这里还有两个表的另一列:PostgreSQL的:加入对至少值大于左侧立柱

--Table A 

id 
1 
4 
7 

--Table B 
id 
3 
8 
11 
13 

我打算实施是对id列,其中右键的值是连接表AB最大值大于左键。例如,表A中的id=1应与id=3一起在表B中加入。同样,表A中的id=4id=7应与表B中的id=8一起加入。有没有一种很好的方式在postgresql中实现?谢谢!查找关键

回答

0

一种方法是相关子查询:

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; 

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

+0

嘿谢谢你的答案!它正在工作,但是......它超级慢。由于表a相对较小,而表b超大(20百万)。你认为有什么优化? – KAs

+0

@JasonZhu。 。 。以'b(id)'上的索引开始。如果这不适合你,请特别提出另一个关于性能的问题。 –

+0

很酷,谢谢哥们〜 – KAs