我有一个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,因此可以在没有任何连接的情况下完成搜索查询。搜索查询是此站点上使用最多的查询,更新/检查很少。
提前感谢您的帮助!
答案 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;
答案 2 :(得分:0)
未经测试,我可能没有正确的语法,但这是原则:
UPDATE table_1 COLUMNS(latitude, longitude) VALUES (
SELECT latitude, longitude FROM table_2
where table_1.zip LIKE CONCAT(table_2.zip, ' %'));