我们有一个如下所示的配置单元表:
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
答案 0 :(得分:1)
好吧,只有一个SQL可以实现您的要求。请参见下文,表a是带有值列的表,表b是带有符号列的表,SQL:
select
distinct a.num,
a.value,
b.symbols
from
mytable1 a
join
mytable2 b on substr(cast(b.num as string),0,3) = cast(a.num as string)
答案 1 :(得分:0)
如果num的数据类型为String,则可以尝试使用Substr
Select
a.num
,a.value
,b.symbols
from a join b on
substr(a.num,3) = substr(b.num,3)
答案 2 :(得分:0)
您可以尝试一下
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
答案 3 :(得分:0)
是否可以尝试使用左半联接与上述查询,如下所示。
选择
a.num,
一个值,
b。符号
从
mytable1 a
左半连接
在substr上的mytable2 b(cast(b.num作为字符串),0,3)= cast(a.num作为字符串)