如何用SQL将PROVIDERS表中的ID替换为LOCATIONS表的名称?
解决PROVIDERS与LOCATIONS表关联查询问题
要实现把PROVIDERS表中的departure_id、destination_id替换为LOCATIONS表对应的location_name,你需要两次关联LOCATIONS表,并给表取不同别名来区分出发地和目的地的关联。正确的SQL语句如下:
SELECT p.id, p.provider_code, dep.location_name AS departure_name, dest.location_name AS destination_name FROM PROVIDERS p INNER JOIN LOCATIONS dep ON p.departure_id = dep.location_id INNER JOIN LOCATIONS dest ON p.destination_id = dest.location_id;
关键说明
- 给LOCATIONS表分别取别名
dep(对应出发地)和dest(对应目的地),避免关联时字段冲突 - 两次
INNER JOIN分别关联PROVIDERS的departure_id和destination_id到LOCATIONS的location_id - 确保两张表的关联字段类型一致(比如都是整数类型),否则会出现关联失败返回空的情况
Python执行示例
假设使用sqlite3库,代码示例如下:
import sqlite3 conn = sqlite3.connect('your_database.db') cursor = conn.cursor() # 执行关联查询 cursor.execute(""" SELECT p.id, p.provider_code, dep.location_name AS departure_name, dest.location_name AS destination_name FROM PROVIDERS p INNER JOIN LOCATIONS dep ON p.departure_id = dep.location_id INNER JOIN LOCATIONS dest ON p.destination_id = dest.location_id; """) result = cursor.fetchall() print(result) # 输出格式将符合期望:[(1, 'DEVO', 'Paris', 'London'), (2, 'PEPO', 'London', 'Paris')] conn.close()
如果之前返回空列表,大概率是关联条件写错(比如误写了LOCATIONS的关联字段),或者PROVIDERS表中存在departure_id/destination_id在LOCATIONS表中无对应记录的情况——若想保留这些行,可以把INNER JOIN替换为LEFT JOIN。
内容的提问来源于stack exchange,提问作者Greezy
相关产品推荐
相关产品推荐

