多表Inner Join关联问题:更新Shipments表的距离字段
解决Shipments表距离更新的SQL问题
我来帮你梳理下问题所在,你的SQL里重复关联了Distances表,这是导致错误结果的核心原因。咱们只需要把Shipments和Locations关联拿到两地的location_id,再和Distances做一次精准匹配就够了,不用两次连接Distances。
错误原因分析
你原SQL中分别连接了两次Distances表,但没有把出发地和目的地的location_id同时和Distances的对应字段做关联,这会导致匹配到的是不相关的距离记录,自然得不到正确结果。
正确的SQL语句
UPDATE Shipments SHP INNER JOIN Locations LOC_FROM ON SHP.`from` = LOC_FROM.location INNER JOIN Locations LOC_TO ON SHP.`to` = LOC_TO.location INNER JOIN Distances DST ON LOC_FROM.location_id = DST.from_location_id AND LOC_TO.location_id = DST.to_location_id SET SHP.distance = DST.distance;
语句逻辑说明
- 用
LOC_FROM和LOC_TO两个别名区分出发地和目的地的Locations关联,避免混淆 - 通过同时匹配出发地和目的地的
location_id,精准定位Distances表中两地对应的距离记录 - 直接将
Distances表中匹配到的distance值赋值给Shipments的distance字段 - 注意:
from是SQL关键字,所以用反引号(`)包裹起来避免语法冲突
内容的提问来源于stack exchange,提问作者anthony
相关产品推荐
相关产品推荐

