2017-11-11 94 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