【发布时间】:2024-01-17 21:54:01
【问题描述】:
我没有找到关于使用子字符串进行内部连接的太多信息。
我不太精通 SQL,我正在尝试在这里进行字符串匹配,但在 INNER JOIN 子句中的 LIKE 运算符出现问题。
我在表 1 和表 2 中有数据。例如表 1 有 JUY,表 2 有 Tyy_ss_JUY。两张表都有超过 10000 个整体。我想同时匹配两者并在匹配字符串时给我一个结果。
假设我有两个表如下:
表格1 位置ID 型号 CAMERA 1 区 A ABCD 2 区 B ALI 3 A区JUY 4 区 A LOS 5 区 C OMG 表2 车辆名称 本田 Txx_ss_ABCD Myvi Tyy_ss_ABCD 威驰 Tyy_ss_JUY 质子 Tyy_ss_LOS SUV Tyb_ss_OMG SUV UUS_ss_OMG SUV Lyx_ss_JUYSELECT Vehicle,NAME
FROM Table2
INNER JOIN (SELECT CAMERA FROM Table1 WHERE Model LIKE '%Zone A%')sub on
NAME LIKE '%'+sub.CAMERA+'%'
预期结果
结果 车辆名称 本田 Txx_ss_ABCD Myvi Tyy_ss_ABCD 威驰 Tyy_ss_JUY 质子 Tyy_ss_LOS SUV Lyx_ss_JUY执行此操作时,我在 DB2 中收到一条错误消息
在函数“DECFLOAT”的字符串参数中发现无效字符。SQLCODE=-420,SQLSTATE=22018,DRIVER=3.69.24 SQL 代码:-420,SQL 状态:22018谢谢
【问题讨论】:
-
使用'||'而不是 '+' 来连接。喜欢'%' ||副相机 || '%'
-
LIKE相当昂贵,尤其是在使用前导通配符时,因为它通常会使使用索引来加快查询速度无效。对于Model,您的样本测试数据根本不需要它,而且您似乎也不需要sub.CAMERA的尾随通配符(可能取决于该字段是CHAR还是VARCHAR) .查询的替代形式:SELECT Table2.vehicle, Table2.name FROM Table1 JOIN Table2 ON Table2.name LIKE '%' || Table1.camera WHERE Table1.model = 'Zone A'(选择这种形式是为了简洁和关系方向)。
标签: db2 inner-join sql-like