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

如何实现:同一FlightNum下A舱座位为0时批量设置SoldOut列值为1?

问题描述
  • 表格包含列:FlightNum、Class、Seats、SoldOut
  • 示例数据:FlightNum为10的A舱Seats值为0,其余舱位有剩余座位
  • 需求:编写SQL语句,当同一FlightNum下Class为A的Seats等于0时,将该FlightNum对应的所有行的SoldOut列设为'1'
  • 当前进展:仅考虑到CASE语句,需要技术实现指导
实现方案

方法1:子查询关联更新(兼容多数数据库)

先筛选出A舱售罄的航班号,再批量更新这些航班的所有行:

UPDATE your_table t1
INNER JOIN (
    SELECT FlightNum
    FROM your_table
    WHERE Class = 'A' AND Seats = 0
) t2 ON t1.FlightNum = t2.FlightNum
SET t1.SoldOut = '1';

方法2:窗口函数实现(适用于PostgreSQL、SQL Server、MySQL 8.0+等)

通过窗口函数标记每个航班是否存在A舱售罄的情况,再执行更新:

UPDATE your_table
SET SoldOut = '1'
WHERE FlightNum IN (
    SELECT FlightNum
    FROM (
        SELECT 
            FlightNum,
            MAX(CASE WHEN Class = 'A' AND Seats = 0 THEN 1 ELSE 0 END) OVER (PARTITION BY FlightNum) AS a_sold_out_flag
        FROM your_table
    ) sub_query
    WHERE a_sold_out_flag = 1
);

关于CASE语句的补充说明

单独的CASE语句无法跨行判断同一航班的全局状态,必须结合子查询或窗口函数才能完成更新。如果只是查询时标记状态,可使用以下语句:

SELECT 
    FlightNum,
    Class,
    Seats,
    CASE 
        WHEN EXISTS (
            SELECT 1 
            FROM your_table t2 
            WHERE t2.FlightNum = t1.FlightNum 
              AND t2.Class = 'A' 
              AND t2.Seats = 0
        ) THEN '1'
        ELSE SoldOut
    END AS SoldOut
FROM your_table t1;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 21:20:44