2017-11-11 9 views
0

Here're二つのテーブルの上に別の列に参加:私は実装する予定は何Postgresqlの左の列より大きい少なくとも値

--Table A 

id 
1 
4 
7 

--Table B 
id 
3 
8 
11 
13 

は右キーの値があるid列、上BとテーブルAに参加することです左のキーより大きい最小値。たとえば、表Aid=1は、表Bid=3と結合する必要があります。同様に、表Aid=4id=7の両方とも表Bid=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はスーパービッグ(2000万)です。最適化があると思いますか? – KAs

+0

@JasonZhu。 。 。 'b(id)'のインデックスから始めます。それがうまく行かない場合は、具体的な質問をしてください。 –

+0

クール、おかげで〜 – KAs

関連する問題