You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何修改SQL查询以显示飞行里程为0的未飞行飞行员?

解决方案:显示里程为0的未飞行飞行员

原查询使用内连接(JOIN),仅能返回同时存在于三个表中的记录——也就是有飞行记录的飞行员,因此无法覆盖从未执行过飞行任务的飞行员。要解决这个问题,需调整连接类型与顺序,具体如下:

关键修改要点

  • 以TPilots表为起点,使用**左连接(LEFT JOIN)**关联TPilotFlights,确保所有飞行员都被保留,哪怕没有对应的飞行关联记录
  • 继续左连接TFlights表,避免因飞行员有飞行关联但航班数据缺失导致的记录丢失(业务场景中虽少见,但左连接更具鲁棒性)
  • 用COALESCE()函数将SUM()返回的NULL值转换为0,因为未飞行的飞行员没有里程数据,SUM会默认返回NULL
  • 移除DISTINCT,因为GROUP BY TP.intPilotID已保证每组唯一,无需额外去重

修正后的SQL查询

SELECT 
    CONCAT(TP.intPilotID, ' ', TP.strFirstName, ' ', TP.strLastName, ', ', COALESCE(SUM(TF.intMilesFlown), 0)) AS MILES
FROM TPilots AS TP
LEFT JOIN TPilotFlights AS TPF ON TP.intPilotID = TPF.intPilotID
LEFT JOIN TFlights AS TF ON TPF.intFlightID = TF.intFlightID
GROUP BY TP.intPilotID, TP.strFirstName, TP.strLastName

逻辑说明

  • 左连接顺序:从飞行员表出发逐步关联下游表,确保无飞行记录的飞行员不会被过滤
  • COALESCE作用:直接将无里程数据的结果替换为0,满足需求中的里程显示要求
  • GROUP BY:按飞行员唯一标识及姓名分组,保证每个飞行员仅返回一条汇总记录

内容的提问来源于stack exchange,提问作者John Webb

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 00:50:21