2017-02-14 122 views
0

我正在处理客户的银行交易数据,我期望排除包含部分或全部客户名称的交易。 我的数据看起来像这样:部分字符串匹配mysql

Table A: 
Cust_ID  |TxnDescription      | 
----------- |-------------------------------------| 
C123------- |#######LIANDRI CORPORATION###########| 
C123------- |#########LIANDRI#####################| 
C123------- |############JEFF L###################| 
C123------- |#########K.S. LI ANDRI###############| 
C123------- |############XAN KRIEGOR##############| 
C123------- |####AXON RESEARCH CORPORATION########| 
C123------- |############FENTECH INCORPORATED#####| 
C123------- |########PHAYDER CORPORATION##########| 
C123------- |############IZANAGI CORPORATION######| 

Table B: 
Cust_ID  |PromoterName       | 
--------------|-------------------------------------| 
C123   |LIANDRI CORPORATION     | 
C123   |JEFF LIANDRI       | 
C123   |K S LIANDRI       | 
C123   |XAN KRIEGOR       | 
C324   |IZANAGI CORPORATION     | 

我的期望的输出是:

TABLE: E 
Cust_ID  |TxnDescription      |Fl_Exclude | 
----------- |-------------------------------------|------------| 
C123------- |#######LIANDRI CORPORATION###########|YES   | 
C123------- |#########LIANDRI#####################|YES   | 
C123------- |############JEFF LI ANDRI############|YES   | 
C123------- |#########K.S. LI ANDRI###############|YES   | 
C123------- |############XAN KRIEGOR##############|YES   | 
C123------- |####AXON RESEARCH CORPORATION########|NO   | 
C123------- |############FENTECH INCORPORATED#####|NO   | 
C123------- |########PHAYDER CORPORATION##########|NO   | 
C123------- |############IZANAGI CORPORATION######|NO   | 

我的方法这里是表B中打破启动子名称转换为词,如下所示:

TABLE: C 
Cust_ID  |PromoterNamePart      | 
--------------|-------------------------------------| 
C123   |LIANDRI        | 
C123   |CORPORATION       | 
C123   |JEFF         | 
C123   |LIANDRI        | 
C123   |K S         | 
C123   |LIANDRI        | 
C123   |XAN         | 
C123   |KRIEGOR        | 

然后删除重复以照顾歧义

TABLE: D 
Cust_ID  |PromoterNamePart      | 
--------------|-------------------------------------| 
C123   |LIANDRI        | 
C123   |JEFF         | 
C123   |K S         | 
C123   |XAN         | 
C123   |KRIEGOR        | 

在上加入一个d CUST_ID和使用D.PromoterNamePartA.TxnDescription一个条款,我希望得到我的输出。

现在,我坚持把表B分解为C,因为单个字母的连续缩写将被视为一个单词。

任何想法如何解决这个问题或任何替代解决方案将深表感谢。谢谢。

回答

0

对于破表B在C你需要为出头..分裂..但你可以建立你(洒)函数在双向(至少)

  1. 使用这个不存在于天然MySQL的功能存储过程
  2. 服务器侧..采用分体式或爆炸功能适当从b和popoluate c。选择(由服务器侧的env依赖)

然后一旦你有表C中

可以是你可以使用像

select distinct 
    a.Cust_id 
    , a.PromoterNamePart 
    , case when a.PromoterNamePart like concat('%',d.PromoterNamePart, '%') 
        Then 'YES' 
        ELSE 'NO' 
      END as Fl_Exclude 
from tableA as a 
left join tableD as d