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

UPDATE INNER JOIN SELECT语句无法运行,语法是否正确?建表报错求助

我来帮你搞定这个问题哈~首先你的CREATE TABLE语句确实存在语法问题,而且从业务需求来看,原表的主键设计也不太适配后续的汇总逻辑,咱们一步步来调整:

第一步:修正pc12_status表的创建语法

你原来的语句里把PRIMARY KEY直接写在hobbs_end列后面,虽然单个主键这么写语法上勉强可行,但结合你“每日按tail_no汇总”的需求,单靠hobbs_end作为主键不合理——毕竟同一架飞机(同一tail_no)同一天可能有多个飞行段,hobbs_end完全可能重复。咱们调整建表语句,既保证数据唯一性,又适配后续汇总:

CREATE TABLE pc12_status (
    id INT AUTO_INCREMENT PRIMARY KEY, -- 新增自增主键,确保每条飞行记录唯一
    hobbs_start DECIMAL(5,2) NOT NULL,
    hobbs_end DECIMAL(5,2) NOT NULL,
    tail_no INT(5) NOT NULL,
    landings INT(5) NOT NULL,
    engine_cycles INT(5) NOT NULL,
    flight_date DATE NOT NULL,
    -- 可选:加唯一约束,防止同一飞机同一天同一起始hobbs的重复记录
    UNIQUE KEY unique_flight_segment (tail_no, flight_date, hobbs_start)
);
第二步:创建(或调整)totals汇总表

totals表要存储每个tail_no每日的唯一汇总数据,所以主键设为tail_no + flight_date的复合主键,避免同一飞机同一天出现多条汇总记录:

CREATE TABLE totals (
    tail_no INT(5) NOT NULL,
    flight_date DATE NOT NULL,
    hobbs_total DECIMAL(6,2) NOT NULL DEFAULT 0.00, -- 汇总飞行时长(hobbs_end - hobbs_start的总和)
    total_landings INT(5) NOT NULL DEFAULT 0, -- 汇总着陆次数
    total_engine_cycles INT(5) NOT NULL DEFAULT 0, -- 汇总发动机循环次数
    PRIMARY KEY (tail_no, flight_date) -- 复合主键,确保每日每架飞机仅一条汇总记录
);
第三步:编写自动更新totals表的SQL

用INSERT ... ON DUPLICATE KEY UPDATE语法,既能新增未存在的日期-飞机组合的汇总数据,也能更新已存在的记录(比如原始表新增飞行数据后重新汇总):

INSERT INTO totals (tail_no, flight_date, hobbs_total, total_landings, total_engine_cycles)
SELECT 
    tail_no,
    flight_date,
    SUM(hobbs_end - hobbs_start) AS hobbs_total,
    SUM(landings) AS total_landings,
    SUM(engine_cycles) AS total_engine_cycles
FROM pc12_status
GROUP BY tail_no, flight_date -- 按飞机和日期分组计算汇总值
ON DUPLICATE KEY UPDATE
    -- 如果主键已存在,就更新对应的汇总字段
    hobbs_total = VALUES(hobbs_total),
    total_landings = VALUES(total_landings),
    total_engine_cycles = VALUES(total_engine_cycles);
补充小提示
  • 如果你的数据库是PostgreSQL而非MySQL,把ON DUPLICATE KEY UPDATE换成ON CONFLICT (tail_no, flight_date) DO UPDATE即可,逻辑完全一致。
  • 你可以把这段更新SQL做成定时任务(比如MySQL事件调度器、Linux的crontab),就能实现每日自动执行汇总更新啦。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 11:57:38