【问题标题】:Join Two Tables by Full Text Search通过全文搜索连接两个表
【发布时间】:2013-03-03 16:59:29
【问题描述】:

此数据库仅用于合并两个表,其中一个包含位置,另一个包含纬度和经度值。我想要做的是按位置连接这两个表,以便将纬度和经度值添加到表 1。

表 1:

Title:                Location:                          Latitude:       Longitude
pizza shop            london, chelsea, el13 4hr          Null            Null
Phone Shop            Manchester - Derby                 Null            Null
Computer Repair       Birmingham (b70)                   Null            Null


Table 2:

Location             Latitude:          Longitude:
London               53.6658            0.25533
birmingham           54.3665            0.89336
manchester           66.3368            0.25836

在某些情况下,表 1 的位置列可以包含使用逗号破折号或多个位置的数据,因此我选择使用全文来匹配第一次匹配的内容并在那里显示经度和纬度值。

表 1 的最终结果应为:

Title:                Location:                          Latitude:       Longitude
pizza shop            London                             53.6658         0.25533
Phone Shop            manchester                         66.3368         0.25836
Computer Repair       birmingham                         54.3665         0.89336

感谢您对此的帮助。

【问题讨论】:

    标签: mysql full-text-search left-join inner-join


    【解决方案1】:

    你可能会找这个

        select t1.Title , SUBSTRING_INDEX(t1.Location, ' ', 1)as Location , t2.Latitude  , t2.Longitude 
       from Table1 t1
      inner join
      Table2 t2
       on  SUBSTRING_INDEX(t1.Location, ' ', 1) = t2.Location
    

    输出:

    TITLE               LOCATION       LATITUDE     LONGITUDE
    pizza shop          london         53.6658      0.25533
    Computer Repair     Birmingham     54.3665      0.89336
    Phone Shop          Manchester     66.3368      0.25836
    

    DEMO SQLFIDDLE HERE

    UPDATE 声明应该是这样的

        update Table1 t1
            inner join Table2 t2
            on  SUBSTRING_INDEX(t1.Location, ' ', 1) = t2.Location 
        SET t1.Latitude = t2.Latitude ,
            t1.Longitude = t2.Longitude
    

    DEMO SQLFIDDLE

    【讨论】:

    • 谢谢,但我如何进行更新而不是选择?
    • 感谢我刚刚在 13,000 行上测试过,只有 8000 行匹配。一些不匹配的行:Peterborough, Cambridgeshire - (两者都列在表 2 中)Old Hall Industrial Estate, Wirral , CH62 3QX - (Wirral 列在表 2 中)
    • 也许我的问题并不清楚,但我的位置数据可能并不总是在前面,例如 xxx、hfhfh、birmingham、fffj,所以关键字可以在任何地方,而不仅仅是在前面。它可以由两个或三个词的关键字组成,例如西布罗姆维奇或伦敦市
    • 那么这两个表是什么关系呢?你有 id 列吗?或与表格相关的东西?
    • 不,我不认为这种关系是通过匹配两个表之间的位置字段来实现的吗?
    【解决方案2】:
    select t1.title, t2.location, t2.latitude, t2.longitude
    from table1 t1, table2 t2
    where t1.location ilike concat('%', t2.location, '%');
    

    【讨论】:

    • 对不起,我的数据集太慢了。
    猜你喜欢
    • 1970-01-01
    • 2018-08-23
    • 2012-12-19
    • 1970-01-01
    • 2017-03-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多