DB2 - строка, совпадающая с внутренним соединением - PullRequest
0 голосов
/ 13 февраля 2019

Я не нашел много информации о внутренних соединениях с подстрокой.Я не очень хорошо разбираюсь в SQL, и я пытаюсь выполнить здесь сопоставление строк, но у меня возникает проблема с оператором LIKE в предложении INNER JOIN.

У меня есть данные в таблице 1 и таблице2. В таблице 1, например, есть JUY, а в таблице 2 - Tyy_ss_JUY.Обе таблицы имеют более 10000 входов.Я хочу сопоставить оба и дать мне результат, когда он совпадает со строкой.

Предположим, у меня есть две таблицы следующим образом:

Table1
LocationID Model          CAMERA
1          Zone A         ABCD
2          Zone B         ALI
3          Zone A         JUY
4          Zone A         LOS
5          Zone C         OMG
Table2   
Vehicle   NAME
Honda     Txx_ss_ABCD
Myvi      Tyy_ss_ABCD
Vios      Tyy_ss_JUY
Proton    Tyy_ss_LOS
SUV       Tyb_ss_OMG
SUV       UUS_ss_OMG
SUV       Lyx_ss_JUY
SELECT Vehicle,NAME
FROM Table2
INNER JOIN (SELECT CAMERA FROM Table1 WHERE Model LIKE '%Zone A%')sub on 
NAME LIKE '%'+sub.CAMERA+'%'

Ожидаемый результат

Result 
Vehicle   NAME
Honda     Txx_ss_ABCD
Myvi      Tyy_ss_ABCD
Vios      Tyy_ss_JUY
Proton    Tyy_ss_LOS
SUV       Lyx_ss_JUY

Я получаю сообщение об ошибке в DB2 при выполнении этого

Invalid character found in a character string argument of the function "DECFLOAT".. SQLCODE=-420, SQLSTATE=22018, DRIVER=3.69.24 SQL Code: -420, SQL State: 22018

Спасибо

1 Ответ

0 голосов
/ 13 февраля 2019

DB2 не поддерживает символ '+' для объединения строк.
Вместо этого используйте один из следующих способов, чтобы получить желаемый результат:

with 
  Table1(LocationID, Model, CAMERA) as (values
  (1, 'Zone A', 'ABCD')
, (2, 'Zone B', 'ALI')
, (3, 'Zone A', 'JUY')
, (4, 'Zone A', 'LOS')
, (5, 'Zone C', 'OMG')
)
, Table2 (Vehicle, NAME) as (values
  ('Honda', 'Txx_ss_ABCD')
, ('Myvi', 'Tyy_ss_ABCD')
, ('Vios', 'Tyy_ss_JUY')
, ('Proton', 'Tyy_ss_LOS')
, ('SUV', 'Tyb_ss_OMG')
, ('SUV', 'UUS_ss_OMG')
, ('SUV', 'Lyx_ss_JUY')
)
SELECT Vehicle,NAME
FROM Table2
INNER JOIN (SELECT CAMERA FROM Table1 WHERE Model LIKE '%Zone A%')sub on 
NAME LIKE 
'%'||sub.CAMERA||'%'
--concat(concat('%', sub.CAMERA), '%')
;
...