当前位置: 首页 > news >正文

mysql 删除重复的数据保留id最大的一条

在 MySQL 中,可以使用以下查询删除重复数据,只保留 ID 最大的那条记录:
SQL

DELETE t
FROM table_name t
LEFT JOIN (
    SELECT column_name, MAX(id) AS max_id
    FROM table_name
    GROUP BY column_name
) t2
ON t.column_name = t2.column_name
AND t.id <> t2.max_id;

Use code with caution.

解释:

    DELETE t FROM table_name t:此部分删除表 table_name 中的所有行。
    LEFT JOIN:此联结将 table_name 表中的所有行与派生表中的匹配行进行连接。派生表由以下部分组成:
        SELECT column_name, MAX(id) AS max_id FROM table_name GROUP BY column_name:此部分为每个重复值组(由 column_name 列的值确定)选择 column_name 和 id 的最大值。
    ON t.column_name = t2.column_name AND t.id <> t2.max_id:此联结条件确保仅将 table_name 表中的行与派生表中具有相同 column_name 值但 id 值较小的行进行连接。

注意:

    此查询将删除所有重复数据,只保留每个重复值组中 ID 最大的那条记录。
    如果您有多个要删除重复数据的列,则可以将它们添加到 column_name 列表中。
    如果您只想删除特定值范围内的重复数据,可以使用 WHERE 子句来过滤结果。

示例:

假设您有一个名为 users 的表,其中包含以下列:

    id:主键
    name:用户姓名
    email:用户电子邮件地址

要删除每个电子邮件地址重复的记录,只保留 ID 最大的那条记录,可以使用以下查询:
SQL

DELETE u
FROM users u
LEFT JOIN (
    SELECT email, MAX(id) AS max_id
    FROM users
    GROUP BY email
) t2
ON u.email = t2.email
AND u.id <> t2.max_id;

Use code with caution.

此查询将删除所有重复的电子邮件地址,只保留每个电子邮件地址中 ID 最大的那条记录。

替代方法:

另一种删除重复数据的方法是使用以下查询:
SQL

SELECT column_name, MAX(id) AS max_id
FROM table_name
GROUP BY column_name;

Use code with caution.

此查询将返回每个重复值组的 column_name 和 id 的最大值。然后,您可以使用以下查询删除所有重复数据,只保留这些最大 ID 值:
SQL

DELETE FROM table_name
WHERE id NOT IN (
    SELECT max_id
    FROM (
        SELECT column_name, MAX(id) AS max_id
        FROM table_name
        GROUP BY column_name
    ) t
);

Use code with caution.

此查询将从 table_name 表中删除所有不等于 max_id 的行,其中 max_id 是每个重复值组的最大 ID 值。

哪个方法更好?

第一个查询通常比第二个查询更有效,因为它只需要执行一次联结。但是,第二个查询可能更容易理解,尤其是如果您不熟悉派生表。

我希望这些信息对您有所帮助。如果您有任何其他问题,请告诉我。

http://www.lryc.cn/news/341308.html

相关文章:

  • UE4 Widget制作搜索框
  • JavaScript js写九九乘法表(两种方法)
  • 算法--贪心算法
  • Redis基本數據結構 ― String
  • php7.4在foreach中对使用数据使用无法??[]判读,无法使用引用传递
  • 传输层协议 TCP UDP协议 解析(二)
  • java+jsp+Oracle+Tomcat 记账管理系统论文(一)
  • echarts双Y轴,并实现图例等
  • STM32 工程移植 LVGL:一步一步完成
  • Linux中分析日志及问题排查
  • 复杂环境下实时鲁棒3D激光雷达定位
  • 9.3.k8s的控制器资源(deployment部署控制器)
  • 通过符号程序搜索提升prompt工程
  • js开启子线程及其使用
  • excel办公系列-图表元素及其作用
  • rocketmq dashboard控制台中topic状态无法展示
  • GPT每日面试题-Typescript中type和interface的区别
  • python数据分析——大数据伦理风险分析
  • 配置 Trunk,实现相同VLAN的跨交换机通信
  • Python 植物大战僵尸
  • SpringBoot:实战项目TLIAS智能学习辅助系统1.1
  • ubuntu-meta-22.04桌面版+ros2-humble 镜像
  • 『大模型笔记』Code Example: Function Calling with ChatGPT
  • 【智能算法应用】混合粒子群算法求解CVRP问题
  • Python项目开发实战:飞机大战游戏(案例教程)
  • 音频压缩的方法有哪些?3种简单的压缩工具分享
  • 阿里云CentOS7 打开/关闭防火墙 开放端口
  • React 组件性能优化
  • jvm 马士兵 01 JVM简介,class文件结构
  • PostgreSQL自带的命令行工具02- createdb