公交路线管理系统中如何通过Inner Join关联单表双外键获取出发/目的地城市名称
解决公交路线出发地和目的地城市名称查询问题
我来帮你搞定这个查询需求!你的核心问题在于关联条件错误,而且需要两次关联Cities表才能分别获取出发地和目的地的城市名称,具体解决方案如下:
问题分析
你之前的查询语句用CITIES.ID=ROUTES.ID做关联,这是逻辑错误:Cities.ID是城市的主键,ROUTES.ID是路线的主键,这两个ID属于完全不同的实体,没有关联关系,所以只能得到不相关的单个名称列。
而我们需要的是:将route表中的from字段关联到Cities表的ID(获取出发地名称),同时将route表中的to字段关联到Cities表的ID(获取目的地名称)。
正确的查询语句
因为要从同一个Cities表中获取两组不同的数据,我们需要给Cities表起两个不同的别名(比如c1代表出发地城市,c2代表目的地城市),同时注意from是SQL关键字,需要用双引号包裹字段名:
SELECT c1.Name AS "from", c2.Name AS "to" FROM route r INNER JOIN Cities c1 ON r."from" = c1.ID INNER JOIN Cities c2 ON r."to" = c2.ID;
语句解释
route r:给route表起别名r,简化代码书写。INNER JOIN Cities c1 ON r."from" = c1.ID:将路线的出发地ID关联到城市表,获取出发地城市名称。INNER JOIN Cities c2 ON r."to" = c2.ID:将路线的目的地ID关联到城市表,获取目的地城市名称。c1.Name AS "from"和c2.Name AS "to":将查询结果的列名分别命名为from和to,符合你期望的输出格式。
这样执行查询后,就能得到from | to格式的结果,分别显示每条路线的出发地和目的地城市名称了。
内容的提问来源于stack exchange,提问作者Muhammad Adeel
相关产品推荐
相关产品推荐

