Как объединить таблицы кустов в зависимости от состояния объединяющего столбца - PullRequest
1 голос
/ 15 мая 2019

У нас есть таблица ульев, как показано ниже:

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 ]

1 голос
/ 16 мая 2019

ОК, только один 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)
0 голосов
/ 16 мая 2019

Можете ли вы попробовать с левым полусоединением с вышеуказанным запросом, как показано ниже.
Выберите a.num, a.value, b.symbols из mytable1 a Левое полусоединение mytable2 b на substr (cast (b.num как строка), 0,3) = приведение (a.num как строка)

0 голосов
/ 16 мая 2019

Можете ли вы попробовать это

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
0 голосов
/ 16 мая 2019

Если тип данных num равен String, вы можете попробовать использовать Substr

Select 
a.num
,a.value
,b.symbols 
from a join b on 
substr(a.num,3) = substr(b.num,3)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...