SQL查询优化需求:获取乘客航班的出发与到达城市
SQL语句优化与表关联解释
修改后的SQL代码
SELECT f.departure_airport, f.arrival_airport, a_dep.city AS city_departure, a_arr.city AS city_arrival FROM flights f JOIN ticket_flights tf ON f.flight_id = tf.flight_id JOIN tickets t ON tf.ticket_no = t.ticket_no JOIN airports a_dep ON f.departure_airport = a_dep.airport_code JOIN airports a_arr ON f.arrival_airport = a_arr.airport_code
优化说明
原SQL用OR关联airports表,会导致每条航班记录匹配两次:一次对应出发机场的城市,一次对应到达机场的城市,不仅结果重复,还没法区分城市是出发地还是目的地。
改为两次关联airports表,分别给表起别名a_dep(对应出发机场)和a_arr(对应到达机场),通过明确的关联条件分别拉取两个城市字段,就能得到你需要的四列清晰结果。
Airports与Flights表的关联关系
flights表的departure_airport和arrival_airport字段存储的是机场代码,和airports表的主键airport_code一一对应。- 这是多对一的关联:多个航班可以从同一个机场起飞,也可以降落至同一个机场;每个机场对应唯一的城市信息。
- 要获取航班的出发/到达城市,必须通过机场代码作为关联键,把
flights和airports表关联起来,才能从airports表中拿到对应的城市数据。
内容的提问来源于stack exchange,提问作者hokerby27
相关产品推荐
相关产品推荐

