将(查询结果)添加到现有表

时间:2016-06-01 11:35:13

标签: mysql

所以我有以下问题。我有2个表(用户:100行和地理邮政编码:450k行)我想更新我的用户表以显示lon和lat如果填写了zipcode。当它没有填写时我想要lon / lat到显示NULL。我如何实现这一目标?

我使用标准提供的MySQL工作台在MySQL中执行此操作。

+CURRENT SITUATION----+------+
| id | zipcode | lon  | lat  |
+----+---------+------+------+
| 88 | 3531EK  | NULL | NULL |
| 89 | 5691JN  | NULL | NULL |
| 90 | 5701NR  | NULL | NULL |
| 91 | 3531EK  | NULL | NULL |
| 92 | 5691JN  | NULL | NULL |
| 93 | NULL    | NULL | NULL |
| 94 | NULL    | NULL | NULL |
| 95 | NULL    | NULL | NULL |
| 96 | NULL    | NULL | NULL |
| 97 | NULL    | NULL | NULL |
+----+---------+------+------+

+FUTURE SITUATION------------------+-----------------+
| id  | zipcode | lat              | lon             |
+-----+---------+------------------+-----------------+
| 583 | NULL    | NULL             | NULL            |
| 632 | NULL    | NULL             | NULL            |
| 797 | 4194WD  | 51.8724978062918 | 5.2758839816285 |
| 812 | 9723ZT  | 53.2067353295688 | 6.5886266741127 |
| 782 | 5617BD  | 51.4471593854488 | 5.4566869544855 |
| 799 | NULL    | NULL             | NULL            |
| 800 | 5623ET  | 51.4618395108795 | 5.4733910341403 |
| 179 | 5709BN  | 51.4752182995384 | 5.7022349534995 |
| 112 | 5701CN  | 51.4759330063412 | 5.6780783810570 |
|  90 | 5701NR  | 51.4775509176254 | 5.6576320175919 |
+-----+---------+------------------+-----------------+

1 个答案:

答案 0 :(得分:0)

在MySQL中,您可以使用join

执行此操作
update users u join
       zipcodes z
       on u.zipcode = z.zipcode
    set u.lat = z.lat, u.lon = z.lon;

但是,我不明白为什么这是必要的。为什么不在需要时使用邮政编码表查找坐标?可能有很好的理由 - 例如,您可能有其他坐标源。但如果邮政编码是唯一的来源,那么就不需要在两个地方存储相同的信息。