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

MySQL查询按airline_id分组后monday全为0的航司实现方案

表结构与需求说明

字段定义

-- 航司表
airline:
airline_id; airlinename 

-- 航班排班表
flightschedule:
flight_id; monday; airline_id

monday字段取值规则:1=该航班周一执飞,0=该航班周一不执飞。

需求目标

查询所有周一完全没有航班执飞的航司,即同一airline_id对应的所有monday字段值均为0,包含从未排过任何航班的航司。

可行实现方案

方案1:LEFT JOIN + 聚合过滤(适配你给出的查询框架调整)

SELECT a.airlinename 
FROM airline a
LEFT JOIN flightschedule f ON a.airline_id = f.airline_id
GROUP BY a.airline_id, a.airlinename
HAVING MAX(IFNULL(f.monday, 0)) = 0;

逻辑说明:

  • 用LEFT JOIN保留所有航司记录,没有排班的航司对应的排班表字段会返回NULL,用IFNULL转为0
  • 聚合后取每个航司所有排班的monday最大值,最大值为0就说明该航司没有任何周一执飞的航班,完全符合要求

如果你坚持使用原有RIGHT JOIN的写法,也可以调整为以下代码,注意该写法无法覆盖没有任何排班记录的航司:

SELECT airlinename FROM airline
RIGHT JOIN flightschedule ON airline.airline_id = flightschedule.airline_id
GROUP BY airline.airline_id, airlinename
HAVING MAX(monday) = 0;

方案2:NOT EXISTS子查询(逻辑更直观,性能更优)

SELECT a.airlinename
FROM airline a
WHERE NOT EXISTS (
    SELECT 1 
    FROM flightschedule f 
    WHERE f.airline_id = a.airline_id 
    AND f.monday = 1
);

逻辑说明:只要该航司不存在任何一条周一执飞的排班记录,就会被筛选出来,默认包含无排班的航司。

内容的提问来源于stack exchange,提问作者Lucas Winkler

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 08:24:10