比较 mySQL 中的数据


Comparing Data in mySQL

我已经搜索过,但找不到特别适合我需求的答案。我有两组数据,需要将第一组(表 1 描述字段(的一部分与列表(表 2(进行比较,并返回每个接口/订单的 VIP 代码。

对于任何描述,唯一相同的标识符是以"003"结尾的 9 位订单 ID。我需要将这个 9 位字符串与另一个表进行比较,该表将始终以订单 ID 开头,但之后可能包含其他字符或数字。我知道 LIKE 比较适用于第二个表,但我无法弄清楚如何将订单号从描述字段中去除。

更新:表 1 是比较路由器接口命令输出的临时表。表 2 是我的静态帐户数据库,其中包含数万个条目,我不想与表 1 进行比较。这就是为什么我不只是拿表二并将订单号与表一进行比较。我特别寻求帮助,以便从表 1 的描述字段中提取 9 位订单 ID。

表1

Interface    Description
Ge 1/0/1     blah_bla_123456003_blahlahlah
Ge 1/0/2     blah_blah_bla_234567003_blahahblh
Ge 1/0/3     b_bla_345678003_blhahblah
Ge 1/0/4     bh_blh_ba_456789003_lahlahbl

表2

Order ID       VIP Code
123456003.0    Premier
234567003      Wholesale
345678003.6    Normal
456789003.23   Premier

预期成果

Order*        VIP Code
123456003     Premier
234567003     Wholesale
345678003     Normal
456789003     Premier
*(stripped from Description)

如果要从表 2 中获取 ID 的前 9 位数字,可以使用 left(table2.id,9) 。它将返回该字段中的前 9 个(左(字符。

然后,您可以将其与 LIKE(使用">%"通配符(或使用正则表达式一起使用。

为什么不将所需的数据存储在每个表的专用列中?将其设置为数字列并对其进行索引,然后您可以使用该列进行非常有效的JOIN

SELECT * FROM Table_1 LEFT JOIN Table_2 USING(common_index)

你可以这样说:

select TRUNCATE(tbl2.orderId,0) orderNum, tbl2.vipcode, tbl1.interface
from table2 tbl2 , table1 tbl1
WHERE tbl1.description like CONCAT('%',TRUNCATE(tbl2.orderId,0),'%');

我在这里做了一个小提琴