2017-02-09 33 views
0

我一直在試圖尋找一個解決方案來解決這個問題。我有兩個表具有以下字段如何使用基於SQL Server或R中多個列的類似匹配來比較兩個表

  • 表1 - OEM_NAME, OEM_MODEL, SUPPLIER - contains 413000 records
  • 表2 - OEM_Name, Model, Supplier_Name, SUPPLIER_MODEL - contains 208000 records

的問題是,該字段的值不完全匹配,我試圖在連接條件中使用多個字段的兩個表之間實現類似的比較。但是,這個查詢是永久執行的。是否有更好的方式在兩個具有多個字段的表之間實現類似的比較。我熟悉SQL Server和R,所以我非常感謝任何可以在這些平臺中工作的解決方案/指導。

SELECT COUNT(*) 
    FROM Catalog_Table as CAT 
    INNER JOIN POPULATION_TABLE AS POP 
    ON POP.OEM_NAME LIKE CONCAT(CAT.OEM_NAME,'%') 
    AND POP.OEM_MODEL LIKE CONCAT(CAT.MODEL,'%') 
    AND POP.SUPPLIER LIKE CONCAT(CAT.SUPPLIER_NAME,'%') 

更新:

樣本數據:

Sample Data

我也嘗試另一種方法來解決這個問題。我串接在這兩個表中的輸入字段,以形成鍵,並試圖用此單一串聯字段進行匹配 - 無論確切和Levenshtein距離(模糊匹配)

所需的結果:

目標這裏是執行相似的匹配,然後手動掃描匹配的記錄以查看匹配是否有意義。

+0

請提供樣本數據和預期的結果。 –

+0

我已添加示例數據的屏幕截圖。這裏的目標是使用此查詢執行類似的匹配,然後手動掃描匹配的記錄並確定匹配是否有意義。 – Satbir

回答

0

你應該嘗試這樣的事情出來::

SELECT COUNT(*) 
FROM Catalog_Table as CAT 
INNER JOIN POPULATION_TABLE AS POP 
ON POP.OEM_NAME LIKE CONCAT(CAT.OEM_NAME,'%') 
AND LEFT(POP.OEM_MODEL, LEN(POP.OEM_MODEL)-3) LIKE CONCAT(LEFT(CAT.MODEL,LEN(CAT.MODEL)-3), '%') 
AND LEFT(POP.SUPPLIER, LEN(POP.SUPPLIER)-3) LIKE CONCAT(LEFT(CAT.SUPPLIER_NAME, LEN(CAT.SUPPLIER_NAME)-3), '%') 
AND LEFT(POP.CATALOG_MODEL, LEN(POP.CATALOG_MODEL)-3) LIKE CONCAT(LEFT(CAT.SUPPLIER_MODEL,LEN(CAT.SUPPLIER_MODEL)), '%') 

如果你明白我的意思呵呵呵

+0

嗨阿爾弗雷多, 謝謝你..這似乎是一個有趣的方式來執行一個喜歡的比賽。我會試試這個,並會讓你知道它是如何執行的。 我能夠通過將最後一個匹配更改爲使用=符號的完全匹配來解決我的性能問題,並且在查詢性能方面提供了很多幫助。不過,我相信你的解決方案會給我更多的比賽,並希望它會有更好的表現。 – Satbir

相關問題