2011-10-28 92 views
0

我有2个表,我需要匹配。请看例子。MYSQL匹配部分字符串

TB1

ID | String1 
1 | Apt 2 
2 | Apt 23 
3 | Apt 22 

TB2

ID2| String2 
1 | 23 Apartment 
2 | 22 The Block 
3 | 2 Complex 

我需要找到其ID的比赛从TB1到TB2 WHERE串1的数量部分字符串2比赛

输出

ID | Matching ID2 | String1 | String 2 
1 | 3   | Apt 2 | 2 Complex 
2 | 1   | Apt 23 | 23 Apartment 
3 | 2   | Apt 22 | 22 Apartment 
+0

不清楚 - 你可以根据什么值解释你想要匹配什么吗? –

+2

对我很清楚。他想匹配String1上的数字。 – m0skit0

+0

对不起,是的,这是正确的我想将字符串1的数字部分加到字符串2 –

回答

0

恕我直言这是糟糕的桌子设计。如果您必须进行此类匹配,请将该号码存储在单独的字段中。

+0

我会,但是这是表如何来到我身边,我需要运行一些匹配 –

+0

表格以什么格式来找你? CSV? –

+0

没有做ALTER TABLE的可能性? – m0skit0

0

如果你真的不能改变表格格式,那么我会创建一个函数去掉给定字符串中的所有非数字字符,然后在查询中使用它。

幸运的是,这是一个任务has been tackled before(希望你的意大利是达到标准)

然后,您可以使用函数在查询中。

因此:

select a.ID, b.ID as "Matching ID2",a.String1,b.String2  
from TB1 as a INNER JOIN TB2 as b  
ON LeaveNumber(a.String1) = LeaveNumber(b.String2) 
ORDER BY a.ID asc; 

骗不了的证据,可能不是最快的,但它应该得到你想要的东西。

虽然我会认真考虑改变这个表设计,如果你有机会。虽然听起来好像是CSV引擎表,或者直接从CSV填充,在这种情况下,您可能没有太多的控制权!