【MySQL】数据去重,仅保留一条(效率最高)

系列文章

C#底层库–MySQLBuilder脚本构建类(select、insert、update、in、带条件的SQL自动生成)
本文链接:https://blog.csdn.net/youcheng_ge/article/details/129179216

C#底层库–MySQL数据库操作辅助类(推荐阅读)
本文链接:https://blog.csdn.net/youcheng_ge/article/details/126886379

C#底层库–SQLite的使用(小型、本地数据库)
本文链接:https://blog.csdn.net/youcheng_ge/article/details/123666958

【提高编程效率】Excel数据批量导入数据库
本文链接:https://blog.csdn.net/youcheng_ge/article/details/126427323

【Oracle】数据库服务器限制ip访问
本文链接:https://blog.csdn.net/youcheng_ge/article/details/122220930

【Oracle】Excel导入数据教程
本文链接:https://blog.csdn.net/youcheng_ge/article/details/118722756

【Oracle】数据库还原教程_数据泵
本文链接:https://blog.csdn.net/youcheng_ge/article/details/118054855

【SQL】如何查询表字段并识别主键
本文链接:https://blog.csdn.net/youcheng_ge/article/details/110820405

【SQL】outer apply的用法
本文链接:https://blog.csdn.net/youcheng_ge/article/details/79903489

【SQL】多表连接重复数据处理
本文链接:https://blog.csdn.net/youcheng_ge/article/details/79903619

MySQL安装教程(详细)
本文链接:https://blog.csdn.net/youcheng_ge/article/details/126037520

MySQL卸载教程(详细)
本文链接:https://blog.csdn.net/youcheng_ge/article/details/129279265

【MySQL】group by分类汇总,如何增加“总计”字段?
本文链接:https://blog.csdn.net/youcheng_ge/article/details/128217837

【MySQL】WITH CHECK OPTION的用法
本文链接:https://blog.csdn.net/youcheng_ge/article/details/128147196

【MySQL】使用存储过程插入千万级数据如何提升效率?
本文链接:https://blog.csdn.net/youcheng_ge/article/details/77728189

【MySQL】数据库表行列转置的实现
本文链接:https://blog.csdn.net/youcheng_ge/article/details/77625052

【MySQL】查询中,NULL值转换为空字符串
本文链接:https://blog.csdn.net/youcheng_ge/article/details/130381878

文章目录

  • 系列文章
  • 前言
  • 一、技术介绍
    • 1.1 方法一
    • 1.2 方法二
  • 二、数据准备
  • 2.1 数据库表结构
  • 三、解决方案
    • 3.1 方法一
    • 3.2 方法二
  • 四、用法总结


前言

本专栏为【数据库】,主要介绍SQL的功能与特点、SQL数据定义语言(表、视图、索引、约束)、SQL数据操作语言(数据检索、数据插入、数据删除、数据更新)、创建与删除触发器、SQL数据控制语言(安全性和授权、事务处理)以及嵌入式SQL。
如果你对本专辑感兴趣,持续关注吧。大家有任何问题,也可以评论区反馈,私信我。
在这里插入图片描述

一、技术介绍

1.1 方法一

采用GROUP BY分类汇总,找到自增ID最小的记录(先进先删),利用IN删除纪录

1.2 方法二

采用备份表的方式,复制空的备份表,将重复纪录取出来,去重完后,插入备份表,删除原表中的所有重复纪录,然后将备份表记录(不重复的纪录)再重新插入 原表。

二、数据准备

2.1 数据库表结构

SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;

-- ----------------------------
-- Table structure for 模具信息表
-- ----------------------------
DROP TABLE IF EXISTS `模具信息表`;
CREATE TABLE `模具信息表`  (
  `AutoID` bigint(20) NOT NULL AUTO_INCREMENT,
  `公司编号` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '空',
  `工厂名称` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '一期',
  `存货编码` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '空',
  `采购订单编号` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '空',
  `领用申请单编号` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '空',
  `销售订单编号` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '空',
  `模具供应商编号` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '空',
  `模具类别` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '新模',
  `模具类型` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '空',
  `模具材质` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '空',
  `模具出厂编号` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '空',
  `模具出厂规格` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '空',
  `模具出厂直径` decimal(10, 4) NULL DEFAULT 0.0000,
  `返修次数` int(255) NULL DEFAULT 0,
  `模具编号` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '空',
  `模链编号` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '空',
  `模具标准规格` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '空',
  `模具规格` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '空',
  `模具标准直径` decimal(10, 4) NULL DEFAULT 0.0000,
  `模具直径` decimal(10, 4) NULL DEFAULT 0.0000,
  `模芯规格` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '空',
  `粒度` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '空',
  `状态描述` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '空',
  `库存状态` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '空',
  `仓库编号` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '空',
  `货位编号` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '空',
  `设备编号` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '空',
  `下盘编号` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '空',
  `下盘规格` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '空',
  `累计公里数` decimal(10, 3) NULL DEFAULT 0.000,
  `累计盘数` int(255) NULL DEFAULT 0,
  `行动` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '空',
  `模具打标时间` datetime NULL DEFAULT '1000-01-01 00:00:00',
  `模具打标录入时间` datetime NULL DEFAULT '1000-01-01 00:00:00',
  `模具打标操作人编号` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '空',
  `模具打标备注` varchar(500) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '空',
  `模具检验时间` datetime NULL DEFAULT '1000-01-01 00:00:00',
  `模具检验录入时间` datetime NULL DEFAULT '1000-01-01 00:00:00',
  `模具检验人编号` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '空',
  `异常类型` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '空',
  `特殊检验说明` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '空',
  `模具检验备注` varchar(500) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '空',
  `最小直径` decimal(10, 4) NULL DEFAULT 0.0000,
  `最大直径` decimal(10, 4) NULL DEFAULT 0.0000,
  `平均直径` decimal(10, 4) NULL DEFAULT 0.0000,
  `椭圆度` decimal(10, 4) NULL DEFAULT 0.0000,
  `椭圆率` decimal(10, 3) NULL DEFAULT 0.000,
  `左定径长度` decimal(10, 3) NULL DEFAULT 0.000,
  `右定径长度` decimal(10, 3) NULL DEFAULT 0.000,
  `定径长度` decimal(10, 3) NULL DEFAULT 0.000,
  `有效值` decimal(10, 3) NULL DEFAULT 0.000,
  `定径区AR` decimal(10, 3) NULL DEFAULT 0.000,
  `左压缩角` decimal(10, 3) NULL DEFAULT 0.000,
  `右压缩角` decimal(10, 3) NULL DEFAULT 0.000,
  `压缩角` decimal(10, 3) NULL DEFAULT 0.000,
  `压缩区AR1` decimal(10, 3) NULL DEFAULT 0.000,
  `压缩区AR2` decimal(10, 3) NULL DEFAULT 0.000,
  `孔偏角X` decimal(10, 3) NULL DEFAULT 0.000,
  `孔偏角Y` decimal(10, 3) NULL DEFAULT 0.000,
  `倍率` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '0',
  `检验结果` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '空',
  `模具首次入库时间` datetime NULL DEFAULT '1000-01-01 00:00:00',
  `领用类型` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '生产领用',
  `模具领用时间` datetime NULL DEFAULT '1000-01-01 00:00:00',
  `模具领用录入时间` datetime NULL DEFAULT '1000-01-01 00:00:00',
  `模具领用人编号` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '空',
  `模具领用备注` varchar(500) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '空',
  `模具退库时间` datetime NULL DEFAULT '1000-01-01 00:00:00',
  `模具退库录入时间` datetime NULL DEFAULT '1000-01-01 00:00:00',
  `模具退库操作人编号` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '空',
  `模具退库原因` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '空',
  `模具退库备注` varchar(500) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '空',
  `模具采购退货时间` datetime NULL DEFAULT '1000-01-01 00:00:00',
  `模具采购退货录入时间` datetime NULL DEFAULT '1000-01-01 00:00:00',
  `模具采购退货操作人编号` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '空',
  `模具采购退货原因` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '空',
  `模具采购退货备注` varchar(500) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '空',
  `模具报废时间` datetime NULL DEFAULT '1000-01-01 00:00:00',
  `模具报废录入时间` datetime NULL DEFAULT '1000-01-01 00:00:00',
  `模具报废操作人编号` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '空',
  `模具报废原因` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '空',
  `模具报废备注` varchar(500) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '空',
  PRIMARY KEY (`AutoID`) USING BTREE,
  INDEX `AK_Key_CompanyID`(`公司编号` ASC) USING BTREE,
  INDEX `AK_Key_FactoryName`(`工厂名称` ASC) USING BTREE,
  INDEX `AK_Key_MaterialID`(`存货编码` ASC) USING BTREE,
  INDEX `AK_Key_U8POID`(`采购订单编号` ASC) USING BTREE,
  INDEX `AK_Key_U8TakeID`(`领用申请单编号` ASC) USING BTREE,
  INDEX `AK_Key_U8SOID`(`销售订单编号` ASC) USING BTREE,
  INDEX `AK_Key_SupplierID`(`模具供应商编号` ASC) USING BTREE,
  INDEX `AK_Key_ModeClass`(`模具类型` ASC) USING BTREE,
  INDEX `AK_Key_ModeMaterial`(`模具材质` ASC) USING BTREE,
  INDEX `AK_Key_ModeIniID`(`模具出厂编号` ASC) USING BTREE,
  INDEX `AK_Key_ModeIniType`(`模具出厂规格` ASC) USING BTREE,
  INDEX `AK_Key_ModeID`(`模具编号` ASC) USING BTREE,
  INDEX `AK_Key_ModeLineID`(`模链编号` ASC) USING BTREE,
  INDEX `AK_Key_ModeType`(`模具规格` ASC) USING BTREE,
  INDEX `AK_Key_ModeHeartType`(`模芯规格` ASC) USING BTREE,
  INDEX `AK_Key_State`(`状态描述` ASC) USING BTREE,
  INDEX `AK_Key_InOutState`(`库存状态` ASC) USING BTREE,
  INDEX `AK_Key_StoreID`(`仓库编号` ASC) USING BTREE,
  INDEX `AK_Key_PositionID`(`货位编号` ASC) USING BTREE,
  INDEX `AK_Key_MCID`(`设备编号` ASC) USING BTREE,
  INDEX `AK_Key_DownID`(`下盘编号` ASC) USING BTREE,
  INDEX `AK_Key_DownType`(`下盘规格` ASC) USING BTREE,
  INDEX `AK_Key_Action`(`行动` ASC) USING BTREE,
  INDEX `AK_Key_ModePrintTime`(`模具打标时间` ASC) USING BTREE,
  INDEX `AK_Key_ModeCheckTime`(`模具检验时间` ASC) USING BTREE,
  INDEX `AK_Key_NGType`(`异常类型` ASC) USING BTREE,
  INDEX `AK_Key_CheckResult`(`检验结果` ASC) USING BTREE,
  INDEX `AK_Key_FirstInTime`(`模具首次入库时间` ASC) USING BTREE,
  INDEX `AK_Key_TakeOutType`(`领用类型` ASC) USING BTREE,
  INDEX `AK_Key_TakeOutTime`(`模具领用时间` ASC) USING BTREE,
  INDEX `AK_Key_ReturnTime`(`模具退库时间` ASC) USING BTREE,
  INDEX `AK_Key_BuySendBack`(`模具采购退货时间` ASC) USING BTREE,
  INDEX `AK_Key_WasteTime`(`模具报废时间` ASC) USING BTREE,
  INDEX `AK_Key_IsOld`(`模具类别` ASC) USING BTREE,
  INDEX `AK_Key_ModeStdType`(`模具标准规格` ASC) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 343075 CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '0-1-基础信息' ROW_FORMAT = Dynamic;

SET FOREIGN_KEY_CHECKS = 1;
SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;

-- ----------------------------
-- Table structure for 模具返修流程表
-- ----------------------------
DROP TABLE IF EXISTS `模具返修流程表`;
CREATE TABLE `模具返修流程表`  (
  `AutoID` bigint(20) NOT NULL AUTO_INCREMENT,
  `公司编号` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '空',
  `工厂名称` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '一期',
  `存货编码` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '空',
  `采购订单编号` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '空',
  `领用申请单编号` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '空',
  `销售订单编号` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '空',
  `模具供应商编号` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '空',
  `模具类别` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '新模',
  `模具类型` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '空',
  `模具材质` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '空',
  `模具出厂编号` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '空',
  `模具出厂规格` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '空',
  `模具出厂直径` decimal(10, 4) NULL DEFAULT 0.0000,
  `返修次数` int(11) NULL DEFAULT 0,
  `模具编号` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '空',
  `模链编号` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '空',
  `模具标准规格` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '空',
  `模具规格` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '空',
  `模具标准直径` decimal(10, 4) NULL DEFAULT 0.0000,
  `模具直径` decimal(10, 4) NULL DEFAULT 0.0000,
  `模芯规格` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '空',
  `粒度` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '空',
  `状态描述` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '空',
  `库存状态` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '空',
  `仓库编号` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '空',
  `货位编号` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '空',
  `设备编号` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '空',
  `下盘编号` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '空',
  `下盘规格` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '空',
  `累计公里数` decimal(10, 3) NULL DEFAULT 0.000,
  `累计盘数` int(11) NULL DEFAULT 0,
  `行动` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '空',
  `模具打标时间` datetime NULL DEFAULT '1000-01-01 00:00:00',
  `模具打标录入时间` datetime NULL DEFAULT '1000-01-01 00:00:00',
  `模具打标操作人编号` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '空',
  `模具打标备注` varchar(500) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '空',
  `模具检验时间` datetime NULL DEFAULT '1000-01-01 00:00:00',
  `模具检验录入时间` datetime NULL DEFAULT '1000-01-01 00:00:00',
  `模具检验人编号` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '空',
  `异常类型` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '空',
  `特殊检验说明` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '空',
  `模具检验备注` varchar(500) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '空',
  `最小直径` decimal(10, 4) NULL DEFAULT 0.0000,
  `最大直径` decimal(10, 4) NULL DEFAULT 0.0000,
  `平均直径` decimal(10, 4) NULL DEFAULT 0.0000,
  `椭圆度` decimal(10, 4) NULL DEFAULT 0.0000,
  `椭圆率` decimal(10, 3) NULL DEFAULT 0.000,
  `左定径长度` decimal(10, 3) NULL DEFAULT 0.000,
  `右定径长度` decimal(10, 3) NULL DEFAULT 0.000,
  `定径长度` decimal(10, 3) NULL DEFAULT 0.000,
  `有效值` decimal(10, 3) NULL DEFAULT 0.000,
  `定径区AR` decimal(10, 3) NULL DEFAULT 0.000,
  `左压缩角` decimal(10, 3) NULL DEFAULT 0.000,
  `右压缩角` decimal(10, 3) NULL DEFAULT 0.000,
  `压缩角` decimal(10, 3) NULL DEFAULT 0.000,
  `压缩区AR1` decimal(10, 3) NULL DEFAULT 0.000,
  `压缩区AR2` decimal(10, 3) NULL DEFAULT 0.000,
  `孔偏角X` decimal(10, 3) NULL DEFAULT 0.000,
  `孔偏角Y` decimal(10, 3) NULL DEFAULT 0.000,
  `倍率` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '0',
  `检验结果` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '空',
  `模具首次入库时间` datetime NULL DEFAULT '1000-01-01 00:00:00',
  `领用类型` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '生产领用',
  `模具领用时间` datetime NULL DEFAULT '1000-01-01 00:00:00',
  `模具领用录入时间` datetime NULL DEFAULT '1000-01-01 00:00:00',
  `模具领用人编号` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '空',
  `模具领用备注` varchar(500) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '空',
  `模具退库时间` datetime NULL DEFAULT '1000-01-01 00:00:00',
  `模具退库录入时间` datetime NULL DEFAULT '1000-01-01 00:00:00',
  `模具退库操作人编号` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '空',
  `模具退库原因` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '空',
  `模具退库备注` varchar(500) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '空',
  `模具采购退货时间` datetime NULL DEFAULT '1000-01-01 00:00:00',
  `模具采购退货录入时间` datetime NULL DEFAULT '1000-01-01 00:00:00',
  `模具采购退货操作人编号` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '空',
  `模具采购退货原因` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '空',
  `模具采购退货备注` varchar(500) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '空',
  `模具报废时间` datetime NULL DEFAULT '1000-01-01 00:00:00',
  `模具报废录入时间` datetime NULL DEFAULT '1000-01-01 00:00:00',
  `模具报废操作人编号` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '空',
  `模具报废原因` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '空',
  `模具报废备注` varchar(500) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '空',
  PRIMARY KEY (`AutoID`) USING BTREE,
  INDEX `AK_Key_CompanyID`(`公司编号` ASC) USING BTREE,
  INDEX `AK_Key_FactoryName`(`工厂名称` ASC) USING BTREE,
  INDEX `AK_Key_MaterialID`(`存货编码` ASC) USING BTREE,
  INDEX `AK_Key_U8POID`(`采购订单编号` ASC) USING BTREE,
  INDEX `AK_Key_U8TakeID`(`领用申请单编号` ASC) USING BTREE,
  INDEX `AK_Key_U8SOID`(`销售订单编号` ASC) USING BTREE,
  INDEX `AK_Key_SupplierID`(`模具供应商编号` ASC) USING BTREE,
  INDEX `AK_Key_ModeClass`(`模具类型` ASC) USING BTREE,
  INDEX `AK_Key_ModeMaterial`(`模具材质` ASC) USING BTREE,
  INDEX `AK_Key_ModeIniID`(`模具出厂编号` ASC) USING BTREE,
  INDEX `AK_Key_ModeIniType`(`模具出厂规格` ASC) USING BTREE,
  INDEX `AK_Key_ModeID`(`模具编号` ASC) USING BTREE,
  INDEX `AK_Key_ModeLineID`(`模链编号` ASC) USING BTREE,
  INDEX `AK_Key_ModeType`(`模具规格` ASC) USING BTREE,
  INDEX `AK_Key_ModeHeartType`(`模芯规格` ASC) USING BTREE,
  INDEX `AK_Key_State`(`状态描述` ASC) USING BTREE,
  INDEX `AK_Key_InOutState`(`库存状态` ASC) USING BTREE,
  INDEX `AK_Key_StoreID`(`仓库编号` ASC) USING BTREE,
  INDEX `AK_Key_PositionID`(`货位编号` ASC) USING BTREE,
  INDEX `AK_Key_MCID`(`设备编号` ASC) USING BTREE,
  INDEX `AK_Key_DownID`(`下盘编号` ASC) USING BTREE,
  INDEX `AK_Key_DownType`(`下盘规格` ASC) USING BTREE,
  INDEX `AK_Key_Action`(`行动` ASC) USING BTREE,
  INDEX `AK_Key_ModePrintTime`(`模具打标时间` ASC) USING BTREE,
  INDEX `AK_Key_ModeCheckTime`(`模具检验时间` ASC) USING BTREE,
  INDEX `AK_Key_NGType`(`异常类型` ASC) USING BTREE,
  INDEX `AK_Key_CheckResult`(`检验结果` ASC) USING BTREE,
  INDEX `AK_Key_FirstInTime`(`模具首次入库时间` ASC) USING BTREE,
  INDEX `AK_Key_TakeOutType`(`领用类型` ASC) USING BTREE,
  INDEX `AK_Key_TakeOutTime`(`模具领用时间` ASC) USING BTREE,
  INDEX `AK_Key_ReturnTime`(`模具退库时间` ASC) USING BTREE,
  INDEX `AK_Key_BuySendBack`(`模具采购退货时间` ASC) USING BTREE,
  INDEX `AK_Key_WasteTime`(`模具报废时间` ASC) USING BTREE,
  INDEX `AK_Key_IsOld`(`模具类别` ASC) USING BTREE,
  INDEX `AK_Key_ModeStdType`(`模具标准规格` ASC) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 131071 CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '3-3-模具车间' ROW_FORMAT = DYNAMIC;

SET FOREIGN_KEY_CHECKS = 1;

三、解决方案

3.1 方法一

SELECT * 
FROM 模具信息表 
WHERE 模具编号='空' AND 状态描述<>'已经模具检验合格, 等待模具打标'

UPDATE 模具信息表
SET 状态描述='已经模具检验合格, 等待模具打标'
WHERE 模具编号='空' AND 状态描述<>'已经模具检验合格, 等待模具打标'

-- 查询重复数据
SELECT 模具供应商编号,模具出厂编号,COUNT(模具出厂编号) 
FROM 模具信息表
GROUP BY 模具供应商编号,模具出厂编号 HAVING COUNT(模具供应商编号)>1;

-- 删除重复数据中,最先插入的,先进先删
-- IN查询效率最低,建议使用单号删除
DELETE FROM 模具信息表
WHERE AutoID IN
(
	SELECT MIN(AutoID)
	FROM 模具信息表_copy1
	GROUP BY 模具供应商编号,模具出厂编号 HAVING COUNT(模具供应商编号)>1
) 

3.2 方法二

-- 1、变更状态描述
-- 发生情况:
-- ①新模具已经导入检测数据,没有打印标签,此时模具编号为空;
-- ②然后又重新检测,重新导入检验数据,模具编号依旧为空
-- ③模具编号为空,需要重新打标,状态描述改为 等待模具打标

-- 查询模具编号为空,但是状态已经入库的记录
SELECT * 
FROM 模具信息表 
WHERE 模具编号='空' AND 状态描述<>'已经模具检验合格, 等待模具打标'
-- 更新模具编号为空,状态初始化为 等在打标状态
UPDATE 模具信息表
SET 状态描述='已经模具检验合格, 等待模具打标'
WHERE 模具编号='空' AND 状态描述<>'已经模具检验合格, 等待模具打标'

-- 2、去除模具信息表重复数据
-- 查询重复数据
SELECT 模具供应商编号,模具出厂编号,COUNT(模具出厂编号) 
FROM 模具信息表
GROUP BY 模具供应商编号,模具出厂编号 HAVING COUNT(模具供应商编号)>1;

-- 删除重复数据中,最先插入的,先进先删
-- IN执行效率最低,太慢太慢了,不建议使用本语句,请继续看下文3
DELETE FROM 模具信息表
WHERE AutoID IN
(
	SELECT MIN(AutoID)
	FROM 模具信息表_copy1 -- 必须使用备份表
	GROUP BY 模具供应商编号,模具出厂编号 HAVING COUNT(模具供应商编号)>1
) 


-- 3、将重复数据,去重后的纪录,转储至模具信息表_copy1(备份的空表)中,总计 225条纪录
INSERT INTO `dl_mes`.`模具信息表_copy1` (`AutoID`, `公司编号`, `工厂名称`, `存货编码`, `采购订单编号`, `领用申请单编号`, `销售订单编号`, `模具供应商编号`, `模具类别`, `模具类型`, `模具材质`, `模具出厂编号`, `模具出厂规格`, `模具出厂直径`, `返修次数`, `模具编号`, `模链编号`, `模具标准规格`, `模具规格`, `模具标准直径`, `模具直径`, `模芯规格`, `粒度`, `状态描述`, `库存状态`, `仓库编号`, `货位编号`, `设备编号`, `下盘编号`, `下盘规格`, `累计公里数`, `累计盘数`, `行动`, `模具打标时间`, `模具打标录入时间`, `模具打标操作人编号`, `模具打标备注`, `模具检验时间`, `模具检验录入时间`, `模具检验人编号`, `异常类型`, `特殊检验说明`, `模具检验备注`, `最小直径`, `最大直径`, `平均直径`, `椭圆度`, `椭圆率`, `左定径长度`, `右定径长度`, `定径长度`, `有效值`, `定径区AR`, `左压缩角`, `右压缩角`, `压缩角`, `压缩区AR1`, `压缩区AR2`, `孔偏角X`, `孔偏角Y`, `倍率`, `检验结果`, `模具首次入库时间`, `领用类型`, `模具领用时间`, `模具领用录入时间`, `模具领用人编号`, `模具领用备注`, `模具退库时间`, `模具退库录入时间`, `模具退库操作人编号`, `模具退库原因`, `模具退库备注`, `模具采购退货时间`, `模具采购退货录入时间`, `模具采购退货操作人编号`, `模具采购退货原因`, `模具采购退货备注`, `模具报废时间`, `模具报废录入时间`, `模具报废操作人编号`, `模具报废原因`, `模具报废备注`)
SELECT *
FROM 模具信息表
GROUP BY 模具供应商编号,模具出厂编号 HAVING COUNT(模具供应商编号)>1;

-- 确认插入总数是不是225
SELECT COUNT(*) 
FROM 模具信息表_copy1

-- 4、查询信息表中,所有重复的记录,模具信息表,总计:678条重复数据
SELECT a.模具供应商编号,a.模具出厂编号,a.* 
FROM 模具信息表 a
INNER JOIN 模具信息表_copy1 b ON a.模具供应商编号=b.模具供应商编号 AND a.模具出厂编号=b.模具出厂编号

-- 5、把重复的记录全部删除掉,总计:678条
SELECT a.* 
FROM 模具信息表 a
INNER JOIN 模具信息表_copy1 b ON a.模具供应商编号=b.模具供应商编号 AND a.模具出厂编号=b.模具出厂编号

DELETE FROM 模具信息表 a
INNER JOIN 模具信息表_copy1 b ON a.模具供应商编号=b.模具供应商编号 AND a.模具出厂编号=b.模具出厂编号


-- 6、重新插入不重复的225条,即步骤3模具信息表_copy1的数据
INSERT INTO `dl_mes`.`模具信息表` (`公司编号`, `工厂名称`, `存货编码`, `采购订单编号`, `领用申请单编号`, `销售订单编号`, `模具供应商编号`, `模具类别`, `模具类型`, `模具材质`, `模具出厂编号`, `模具出厂规格`, `模具出厂直径`, `返修次数`, `模具编号`, `模链编号`, `模具标准规格`, `模具规格`, `模具标准直径`, `模具直径`, `模芯规格`, `粒度`, `状态描述`, `库存状态`, `仓库编号`, `货位编号`, `设备编号`, `下盘编号`, `下盘规格`, `累计公里数`, `累计盘数`, `行动`, `模具打标时间`, `模具打标录入时间`, `模具打标操作人编号`, `模具打标备注`, `模具检验时间`, `模具检验录入时间`, `模具检验人编号`, `异常类型`, `特殊检验说明`, `模具检验备注`, `最小直径`, `最大直径`, `平均直径`, `椭圆度`, `椭圆率`, `左定径长度`, `右定径长度`, `定径长度`, `有效值`, `定径区AR`, `左压缩角`, `右压缩角`, `压缩角`, `压缩区AR1`, `压缩区AR2`, `孔偏角X`, `孔偏角Y`, `倍率`, `检验结果`, `模具首次入库时间`, `领用类型`, `模具领用时间`, `模具领用录入时间`, `模具领用人编号`, `模具领用备注`, `模具退库时间`, `模具退库录入时间`, `模具退库操作人编号`, `模具退库原因`, `模具退库备注`, `模具采购退货时间`, `模具采购退货录入时间`, `模具采购退货操作人编号`, `模具采购退货原因`, `模具采购退货备注`, `模具报废时间`, `模具报废录入时间`, `模具报废操作人编号`, `模具报废原因`, `模具报废备注`)

SELECT `公司编号`, `工厂名称`, `存货编码`, `采购订单编号`, `领用申请单编号`, `销售订单编号`, `模具供应商编号`, `模具类别`, `模具类型`, `模具材质`, `模具出厂编号`, `模具出厂规格`, `模具出厂直径`, `返修次数`, `模具编号`, `模链编号`, `模具标准规格`, `模具规格`, `模具标准直径`, `模具直径`, `模芯规格`, `粒度`, `状态描述`, `库存状态`, `仓库编号`, `货位编号`, `设备编号`, `下盘编号`, `下盘规格`, `累计公里数`, `累计盘数`, `行动`, `模具打标时间`, `模具打标录入时间`, `模具打标操作人编号`, `模具打标备注`, `模具检验时间`, `模具检验录入时间`, `模具检验人编号`, `异常类型`, `特殊检验说明`, `模具检验备注`, `最小直径`, `最大直径`, `平均直径`, `椭圆度`, `椭圆率`, `左定径长度`, `右定径长度`, `定径长度`, `有效值`, `定径区AR`, `左压缩角`, `右压缩角`, `压缩角`, `压缩区AR1`, `压缩区AR2`, `孔偏角X`, `孔偏角Y`, `倍率`, `检验结果`, `模具首次入库时间`, `领用类型`, `模具领用时间`, `模具领用录入时间`, `模具领用人编号`, `模具领用备注`, `模具退库时间`, `模具退库录入时间`, `模具退库操作人编号`, `模具退库原因`, `模具退库备注`, `模具采购退货时间`, `模具采购退货录入时间`, `模具采购退货操作人编号`, `模具采购退货原因`, `模具采购退货备注`, `模具报废时间`, `模具报废录入时间`, `模具报废操作人编号`, `模具报废原因`, `模具报废备注`
FROM 模具信息表_copy1


-- 7、清空模具返修流程表数据
DELETE FROM 模具返修流程表

-- 8、根据模具信息表,初始化 模具返修流程表数据
INSERT INTO `dl_mes`.`模具返修流程表` (`公司编号`, `工厂名称`, `存货编码`, `采购订单编号`, `领用申请单编号`, `销售订单编号`, `模具供应商编号`, `模具类别`, `模具类型`, `模具材质`, `模具出厂编号`, `模具出厂规格`, `模具出厂直径`, `返修次数`, `模具编号`, `模链编号`, `模具标准规格`, `模具规格`, `模具标准直径`, `模具直径`, `模芯规格`, `粒度`, `状态描述`, `库存状态`, `仓库编号`, `货位编号`, `设备编号`, `下盘编号`, `下盘规格`, `累计公里数`, `累计盘数`, `行动`, `模具打标时间`, `模具打标录入时间`, `模具打标操作人编号`, `模具打标备注`, `模具检验时间`, `模具检验录入时间`, `模具检验人编号`, `异常类型`, `特殊检验说明`, `模具检验备注`, `最小直径`, `最大直径`, `平均直径`, `椭圆度`, `椭圆率`, `左定径长度`, `右定径长度`, `定径长度`, `有效值`, `定径区AR`, `左压缩角`, `右压缩角`, `压缩角`, `压缩区AR1`, `压缩区AR2`, `孔偏角X`, `孔偏角Y`, `倍率`, `检验结果`, `模具首次入库时间`, `领用类型`, `模具领用时间`, `模具领用录入时间`, `模具领用人编号`, `模具领用备注`, `模具退库时间`, `模具退库录入时间`, `模具退库操作人编号`, `模具退库原因`, `模具退库备注`, `模具采购退货时间`, `模具采购退货录入时间`, `模具采购退货操作人编号`, `模具采购退货原因`, `模具采购退货备注`, `模具报废时间`, `模具报废录入时间`, `模具报废操作人编号`, `模具报废原因`, `模具报废备注`) 

SELECT `公司编号`, `工厂名称`, `存货编码`, `采购订单编号`, `领用申请单编号`, `销售订单编号`, `模具供应商编号`, `模具类别`, `模具类型`, `模具材质`, `模具出厂编号`, `模具出厂规格`, `模具出厂直径`, `返修次数`, `模具编号`, `模链编号`, `模具标准规格`, `模具规格`, `模具标准直径`, `模具直径`, `模芯规格`, `粒度`, `状态描述`, `库存状态`, `仓库编号`, `货位编号`, `设备编号`, `下盘编号`, `下盘规格`, `累计公里数`, `累计盘数`, `行动`, `模具打标时间`, `模具打标录入时间`, `模具打标操作人编号`, `模具打标备注`, `模具检验时间`, `模具检验录入时间`, `模具检验人编号`, `异常类型`, `特殊检验说明`, `模具检验备注`, `最小直径`, `最大直径`, `平均直径`, `椭圆度`, `椭圆率`, `左定径长度`, `右定径长度`, `定径长度`, `有效值`, `定径区AR`, `左压缩角`, `右压缩角`, `压缩角`, `压缩区AR1`, `压缩区AR2`, `孔偏角X`, `孔偏角Y`, `倍率`, `检验结果`, `模具首次入库时间`, `领用类型`, `模具领用时间`, `模具领用录入时间`, `模具领用人编号`, `模具领用备注`, `模具退库时间`, `模具退库录入时间`, `模具退库操作人编号`, `模具退库原因`, `模具退库备注`, `模具采购退货时间`, `模具采购退货录入时间`, `模具采购退货操作人编号`, `模具采购退货原因`, `模具采购退货备注`, `模具报废时间`, `模具报废录入时间`, `模具报废操作人编号`, `模具报废原因`, `模具报废备注`
FROM 模具信息表


四、用法总结

方法一不推荐,一来,不能利用原表本身删除,也要复制一模一样的备份表,找到原ID号;二来,IN是SQL中查询效率最低的,学过数据优化的朋友知道,调优手段有一个减少替换使用IN语句
推荐方法二。

你可能感兴趣的:(数据库,mysql,数据库,去重,效率最高,大数据)