DB2 - 字符串匹配内部连接
DB2 - string match-inner join
我没有找到关于带子字符串的内连接的太多信息。
我不是很精通 SQL,我想在这里进行字符串匹配,但是 INNER JOIN
子句中的 LIKE
运算符出现问题。
我在 Table 1 和 Table 2 中有数据。例如 Table 1 有 JUY,Table 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
谢谢
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), '%')
;
我没有找到关于带子字符串的内连接的太多信息。
我不是很精通 SQL,我想在这里进行字符串匹配,但是 INNER JOIN
子句中的 LIKE
运算符出现问题。
我在 Table 1 和 Table 2 中有数据。例如 Table 1 有 JUY,Table 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
谢谢
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), '%')
;