DB2-字符串匹配内部联接

时间:2019-02-12 21:21:01

标签: db2 inner-join sql-like

我没有找到有关带子串的内部联接的更多信息。 我不太精通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 :(得分:1)

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), '%')
;