Board logo

Title: 关于数据重复 603页面处理结果 [Print this page]

Author: sky999    Time: 2025-7-19 11:40     Title: 关于数据重复 603页面处理结果

删除了重复数据,增加了唯一索引。 /* ============ 1) 清理 banchengpin_production_order 重复 ============ */ DELETE bo FROM banchengpin_production_order bo JOIN ( SELECT MIN(id) AS keep_id, FCONTRACTNO, FNUMBER_SUB, FMATNUM FROM banchengpin_production_order GROUP BY FCONTRACTNO, FNUMBER_SUB, FMATNUM HAVING COUNT(*) > 1 ) t ON bo.FCONTRACTNO = t.FCONTRACTNO AND bo.FNUMBER_SUB = t.FNUMBER_SUB AND bo.FMATNUM = t.FMATNUM WHERE bo.id <> t.keep_id; /* ============ 2) 清理 material 重复 (FNUMBER = 08100‑3339 出现 3 条) ============ */ DELETE m1 FROM material m1 JOIN ( SELECT MIN(id) AS keep_id, FNUMBER FROM material GROUP BY FNUMBER HAVING COUNT(*) > 1 ) t ON m1.FNUMBER = t.FNUMBER WHERE m1.id <> t.keep_id; /* ============ 3) 加唯一索引,防止再插重复 ============ */ ALTER TABLE banchengpin_production_order ADD UNIQUE KEY uniq_order (FCONTRACTNO, FNUMBER_SUB, FMATNUM); ALTER TABLE material ADD UNIQUE KEY uniq_mat (FNUMBER); 出现 重复记录 通常就两个层面的问题: | 层面 | 直接原因 | 典型触发情形 | 数据库结构 | 没有唯一约束(`UNIQUE KEY` / 组合主键) | 多人或脚本并发INSERT; “导入—撤销—再导入” 流程; 业务上需要更新却用 INSERT,导致同一 合同号+子单号+物料 又插一次 | 业务代码 / 流程 | 写入逻辑不分 “新建” 与 “更新” | ① Excel/接口批量导入时不先 `SELECT` 检查是否已存在;② 回写上游系统时同时写 半成品排产单 和 物料主数据,结果把同一物料也插了多条(如 `081003339` 出现 3 次) | 具体到刚跑出来的结果: 1. `banchengpin_production_order`里每组`FCONTRACTNO + FNUMBER_SUB + FMATNUM` 本应唯一,但很多组合出现 2 条 —— 说明排产单本身被重复写入。 2. `material`里物料编码 `081003339` 有 3 条,左连接时就会把一条排产单放大成 3 行。 3. 没有任何唯一索引阻拦,所以重复一旦写进去,查询就一定会显示出来。 > 一句话:“约束缺位 + 写入脚本不做去重”,是造成页面同一行数据重复出现的根本原因。

Image attachment: 微信图片_20250719111752.jpg (2025-7-19 11:40, 75.72 K) / Number of times this attachment has been downloaded 5
http://iot.caffz123.uk:12345/mud/AbyssalSwamp/index/attachment.php?aid=4457






Welcome AbyssalSwamp (http://iot.caffz123.uk:12345/mud/AbyssalSwamp/index/) caffz.com