sql中的部分字符串匹配

时间:2016-10-12 19:47:01

标签: sql

我需要根据它们共有的字符串数来匹配两个不同表中的两列。所以例如在第一栏我有:

================Table 1==============================
ID     desc             Year      Month
123    food_drink       2016      8
345    shoe_bag         2016      8
678    001_toilet_paper 2015      7
910    Bags_of_thing    2015      6

======================table 2======================
ID      Name           Year        month
ad      drink_server   2016        8 
ac      shoe_shiny     2016        8
aa      white_paper    2015        7
cc      blue_bags      2015        6

是否可以通过在描述和名称中加入年,月和类似字符串来组合这两个表。因此,比较desc和name列以查看它们是否共有> = 5个字符串,然后:

===================================================
ID1  ID2  name          desc              Year  Month
123  ad   drink server  food_drink        2016   8
678  aa   white_paper   001_toilet_paper  2016   7

实质上,我需要一种方法来比较两列不同表之间的公共字符串数。感谢。

2 个答案:

答案 0 :(得分:0)

您的问题归结为您的数据甚至不在First Normal Form中,因此很难在SQL中处理它。

这就是我要做的事情:

  • 创建一个临时表,将字段拆分为单词。我认为ID是两个表中的关键。表格如下:

    ================表格1 ============================= =

    ID1     word
    123    food
    123    drink
    345    shoe
    345    bag
    ...
    

=============表格2 ======================

    ID2      word
    ad      drink
    ad      server 
    ac      shoe
    ac      shiny
    ... 

现在,您可以轻松找到共有5个字或更多字的ID:

SELECT ID1, ID2 FROM words1 JOIN words2 ON (word1.word = words2.word) 
GROUP by ID1, ID2
having count(*) >= 5;

获得ID1和ID2后,您可以加入原始表并检索所需的其余数据。

答案 1 :(得分:0)

感谢所有回答的人。我最后使用R进行字符串匹配,使用以下链接中描述的技术:

https://www.r-bloggers.com/fuzzy-string-matching-a-survival-skill-to-tackle-unstructured-information/