我正在尝试将表1与表2结合起来以获取表3。(请参见所需的输出)但是,由于表中只包含一个值,因此有太多选择,因此我似乎无法使其正常工作。左联接似乎无效。
我发现了这个:Left Join without duplicate rows from left table
似乎与我的用例匹配,但外部存储不在PrestoDB中。
我本质上想将T1中的每一行与T2中的单个行进行匹配。
答案 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;