MySQL关联查询问题:如何将两列ID映射为LOCATION表的不同名称
解决ORDER表关联LOCATION表获取双向地址名称的问题
你的问题出在只对LOCATION表做了一次关联,导致destination和origin字段都引用了同一次关联后的LOCATION.name值,自然结果相同。要分别获取两个ID对应的名称,需要两次关联LOCATION表,并给表起不同别名区分。
正确的MySQL查询语句
SELECT `ORDER`.id, `ORDER`.responsable, `ORDER`.date, `ORDER`.state, dest_loc.name AS destination, orig_loc.name AS origin FROM `ORDER` LEFT JOIN `LOCATION` AS dest_loc ON `ORDER`.destination = dest_loc.id LEFT JOIN `LOCATION` AS orig_loc ON `ORDER`.origin = orig_loc.id;
语句说明
- 第一次关联
LOCATION并命名为dest_loc,通过ORDER.destination关联dest_loc.id,获取目的地名称 - 第二次关联
LOCATION并命名为orig_loc,通过ORDER.origin关联orig_loc.id,获取出发地名称 - 使用
LEFT JOIN而非INNER JOIN,确保即使ORDER表中的destination或origin没有匹配的LOCATION记录时,ORDER的行依然会被保留(对应字段显示NULL)
按照这个语句查询,就能得到你期望的结果:destination为HOUSE、origin为WORK。
内容的提问来源于stack exchange,提问作者rodrigo cantu
相关产品推荐
相关产品推荐

