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

如何基于flight_number和date两列删除flights表中的重复数据

Flights表重复数据删除SQL方案

核心逻辑:利用表自带的唯一id列,对flight_number和date相同的分组,保留其中一条记录(默认保留id最小的最早插入记录,需要保留最新的可自行调整函数)。

通用写法(兼容绝大多数数据库)

DELETE FROM flights
WHERE id NOT IN (
    SELECT MIN(id)
    FROM flights
    GROUP BY flight_number, `date`
);

如果使用MySQL出现「不能在子查询中引用正在更新的表」的报错,可以嵌套一层临时表规避:

DELETE FROM flights
WHERE id NOT IN (
    SELECT id FROM (
        SELECT MIN(id) AS id
        FROM flights
        GROUP BY flight_number, `date`
    ) AS tmp
);

自连接写法

DELETE f1
FROM flights f1
INNER JOIN flights f2
  ON f1.flight_number = f2.flight_number
  AND f1.`date` = f2.`date`
  AND f1.id > f2.id;

注意事项

  1. 执行删除前建议先运行查询语句确认待删除数据是否符合预期:
SELECT * FROM flights
WHERE id NOT IN (
    SELECT MIN(id)
    FROM flights
    GROUP BY flight_number, `date`
);
  1. 若需要保留每个分组中最新插入的记录,将上述语句中的MIN(id)改为MAX(id),自连接语句中的f1.id > f2.id改为f1.id < f2.id即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 15:45:04