基于邮政编码的MySQL更新

时间:2011-10-10 14:44:44

标签: mysql sql-update

我有一个usertable,其中包含一个名为zip的字段(邮政编码) 我还有一个基于zipcodes的纬度,经度值的地理表。

所以:

usertable 
table_1 contains fields: zip, latitude,longitude (in last 2 fields all values are NULL)
geotable:
table_2 contains fields: zip, latitude,longitude

table_1中的zipcode格式为:1111 AA(4个数字,2个字母,通常用空字符分隔)

table_2中的zipcode格式为:1111(只有四个数字)

我想知道更新查询应该如何?

我想使用geotable中的值更新usertable,因此可以在没有任何连接的情况下完成搜索查询。搜索查询是此站点上使用最多的查询,更新/检查很少。

提前感谢您的帮助!

3 个答案:

答案 0 :(得分:2)

你可以写

UPDATE table_1 SET
  latitude = (SELECT latitude FROM table_2 WHERE table_1.zip LIKE CONCAT(table_2.zip, '%')),
  longitude = (SELECT longitude FROM table_2 WHERE table_1.zip LIKE CONCAT(table_2.zip, '%'));

不幸的是,我不相信语法与科林的建议非常相似。您可能会发现,首先从table_2中选择值然后插入它们会更有效。

答案 1 :(得分:1)

您可以使用UPDATE ... JOIN子句连接表并执行更新:

update
    usertable ut inner join geotable gt on
        ut.zip like concat(gt.zip, '%')
    set ut.latitude = gt.latitude,
        ut.longitude = gt.longitude;

演示:http://www.sqlize.com/398E9CKddr

答案 2 :(得分:0)

未经测试,我可能没有正确的语法,但这是原则:

UPDATE table_1  COLUMNS(latitude, longitude) VALUES (
   SELECT latitude, longitude FROM table_2 
      where table_1.zip LIKE CONCAT(table_2.zip, ' %'));