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

标签 mysql

所以我有以下问题。我有 2 个表(用户:100 行和地理邮政编码:450k 行),我想更新我的用户表以显示 lon 和 lat(如果邮政编码已填写)。当未填写时,我希望 lon/lat 为显示空值。我如何实现这一目标?

我使用标准提供的 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 |
+-----+---------+------------------+-----------------+

最佳答案

在 MySQL 中,您可以通过 join 来完成此操作:

update users u join
       zipcodes z
       on u.zipcode = z.zipcode
    set u.lat = z.lat, u.lon = z.lon;

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

关于mysql - 添加(查询结果)到现有表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37567505/

相关文章:

php - 在 Zend\Db\Sql\Select 之后获取 SQL

mysql - sql中外键表中的重复键

MySQL - 具有非聚合列的 COUNT()

mysql - 带有百分比和子查询的案例语句

php - 用于智能搜索的 Tricky SQL

mysql - MAC OSX MySQL 查询日志不写

MySql 登录问题 - 未加载 auth_socket

MySQL 与 PostgreSQL?我应该为我的 Django 项目选择哪个?

mysql修改datetime设置时分不修改月年日

PHP 产生不正确的算术结果