2017-02-14 149 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