PHPMyAdmin 4.7.7中关联表更新Latitude字段失败求助
解决MySQL中通过关联表更新Latitude列的问题
嘿,你遇到的问题其实是因为用了类似SQL Server的UPDATE语法,但MySQL的UPDATE JOIN写法不一样~咱们来调整一下语句:
首先,你的需求是把geotemp表中的Latitude值,根据gridref匹配更新到geodata表的Latitude列对吧?那正确的MySQL语法应该是这样的:
UPDATE geodata q INNER JOIN geotemp a ON q.gridref = a.gridref SET q.Latitude = a.Latitude;
为什么原来的语句不行?
MySQL不支持UPDATE [表] SET ... FROM [关联表]这种格式,它要求把JOIN子句直接放在UPDATE后面,再写SET操作。另外你原来的ON条件里加了q.Latitude = a.Latitude,这会限制只有两边Latitude已经相等的行才会被更新,这显然不是你想要的,所以要把这个条件去掉,只保留gridref的匹配——毕竟你是想用a表的Latitude覆盖q表的,对吧?
安全操作建议
- 先跑一个SELECT语句验证匹配的行是否正确,避免误更新:
SELECT q.gridref, q.Latitude AS old_lat, a.Latitude AS new_lat FROM geodata q INNER JOIN geotemp a ON q.gridref = a.gridref; - 如果你的表数据比较重要,建议先备份一下
geodata表,或者用事务包裹更新语句(如果你的表是InnoDB引擎的话):START TRANSACTION; UPDATE geodata q INNER JOIN geotemp a ON q.gridref = a.gridref SET q.Latitude = a.Latitude; -- 检查更新结果没问题的话再提交 COMMIT; -- 如果有问题就回滚 -- ROLLBACK;
这样应该就能顺利完成你想要的更新操作啦~
内容的提问来源于stack exchange,提问作者Henry
相关产品推荐
相关产品推荐

