SQL跨表JOIN插入记录时如何正确匹配填充table_1经纬度字段
问题根因
你误用了INSERT语句:INSERT的作用是向表中新增全新的行,而非更新表中已存在行的字段值。
你的语句执行逻辑是:匹配到两表address相等的记录后,把查到的经纬度作为新行插入table_1,由于你没有给新行指定address字段的值,新插入的行address字段默认就是NULL;而原本就存在的、已经填好city_1/city_2/city_3的三行记录从头到尾没有被修改,所以它们的经纬度依然是NULL,和你看到的错误输出完全吻合。
修复方案
- 第一步:先清理之前错误插入的脏数据
DELETE FROM table_1 WHERE address IS NULL; - 第二步:改用
UPDATE JOIN语法更新已有行的经纬度字段,这才是关联匹配后更新存量数据的正确写法,适用于MySQL等绝大多数主流关系型数据库:UPDATE table_1 INNER JOIN table_2 ON table_1.address = table_2.address SET table_1.latitude = table_2.latitude, table_1.longitude = table_2.longitude;
执行完成后查询table_1,就能得到你预期的、地址和经纬度一一对应的结果。
内容的提问来源于stack exchange,提问作者Kash
相关产品推荐
相关产品推荐

