左联接没有重复的行1到1联接。使一个表中的每一行仅联接到另一表中的一行

时间:2018-11-12 20:00:53

标签: sql

我正在尝试将表1与表2结合起来以获取表3。(请参见所需的输出)但是,由于表中只包含一个值,因此有太多选择,因此我似乎无法使其正常工作。左联接似乎无效。

我发现了这个:Left Join without duplicate rows from left table

似乎与我的用例匹配,但外部存储不在PrestoDB中。

我本质上想将T1中的每一行与T2中的单个行进行匹配。

Desired Output

2 个答案:

答案 0 :(得分:0)

如果我理解正确,则可以使用row_number()

select t1.*, t2.col3
from t1 left join
     (select t2.*, row_number() over (partition by col2 order by col3 nulls last) as seqnum
      from t2
     ) t2
     on t2.col2 = t1.col2 and t2.seqnum = 1;

答案 1 :(得分:0)

如果没有正确的键,则会得到m:n-join而不是1:n。您可以为两个表(与col2结合)用作以下联接的键来计算行号:

select t1.col1, t1.col2, t2.col3
from 
 (
   select t1.*, 
      row_number() over (partition by col2 order by col2) as rn
   from t1
 ) as t
left join
 (
   select t2.*, 
      row_number() over (partition by col2 order by col2) as rn
   from t2
 ) as t2
 on t1.col2 = t2.col2 
and t1.rn = t2.rn;