我们有一个Hive表如下:
num value
123 A
456 B
789 C
101 D
联接表是:
num Symbols
123 ASC
456001 JEN
456002 JEN
456003 JEN
789001 CON
101 URB
我们的预期结果:
num value symbols
123 A ASC
456 B JEN
789 C CON
101 D URB
目前,为了得到结果,我们将两次合并表。就像第一次使用下面的查询插入到某个tmp表中一样:
select
a.num,
a.value,
b.symbols
from mytable a
join mytable b on a.num = b.num;
此查询正在生成的结果 keys 123,101.
接下来,我们将运行另一个查询,如下所示:
select
a.num,
a.value,
b.symbols
from mytable a
join mytable b on CONCAT(a.num,'001') = b.num;
此查询正在生成的结果 keys 456, 789
.
这两个查询结果被插入到某个tmp配置单元表中,我们从tmp表中选择最终结果。
总的来说,这个设计看起来很糟糕。但我想知道是否有更好的方法来实现这一点。谢谢。
查询结果
为了
Select
a.num
,a.value
,b.symbols
from
(select substr(num,3) as num, value from table)a
join
(select substr(num,3) as num, symbols from table) b
on a.num = b.num
a.num a.value b.symbols
3 A ASC
1 D URB
4条答案
按热度按时间mklgxw1f1#
您可以尝试使用左半连接和上面的查询,如下所示。
从mytable1 a left semi join mytable2 b on substr(cast(b.num as string),0,3)=cast(a.num as string)中选择a.num、a.value、b.symbols
sxissh062#
如果num的数据类型是string,那么可以尝试使用substr
disho6za3#
你能试试这个吗
fae0ux8s4#
好的,只要一个sql就可以实现您的需求。请看下面,表a是带有value列的表,表b是带有symbols列的表,sql: