比较mySQL中的数据

时间:2013-09-30 17:55:21

标签: php mysql sql

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

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

更新:表1是比较路由器接口命令输出的临时表。表2是我的静态帐户数据库,其中包含数万个我不想与表一比较的条目。这就是为什么我不只是拿表2并将订单号与表一进行比较。我特别请求帮助,以便从表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)

3 个答案:

答案 0 :(得分:1)

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

然后你可以使用LIKE(使用“ ”通配符)或使用正则表达式。

答案 1 :(得分:0)

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

SELECT * FROM Table_1 LEFT JOIN Table_2 USING(common_index)

答案 2 :(得分:0)

你可以这样:

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

我做了一个小提琴here