| 1234567891011121314151617181920212223242526272829303132333435363738 |
- -- ============================================================
- -- 产品表 cargos 名称统一 + 去重 + 硫酸虚拟删除
- -- 执行前请先备份数据库;建议在测试环境先执行并核对结果
- -- 表结构:cargos(id, name, remarks, is_deleted, created_at),name 有 UNIQUE 约束
- -- ============================================================
- -- ----------------------------------------
- -- 一、产品名称统一(注意:多对一时需先更新一个,其余同目标名的行做物理删除以免违反 UNIQUE)
- -- ----------------------------------------
- -- 1. 32%液碱、氢氧化钠 32% → 32% 烧碱(两源名指向同一目标,需防重复)
- UPDATE cargos SET name = '32% 烧碱' WHERE name = '32%液碱';
- UPDATE cargos SET name = '32% 烧碱' WHERE name = '氢氧化钠 32%' AND NOT EXISTS (SELECT 1 FROM (SELECT name FROM cargos WHERE name = '32% 烧碱' LIMIT 1) c2);
- DELETE FROM cargos WHERE name = '氢氧化钠 32%';
- -- 2. 50%硫酸:删除(表中已有「工业硫酸 50%」则不再保留本条)
- DELETE FROM cargos WHERE name = '50%硫酸';
- -- 3. 92%硫酸 → 工业硫酸 92.5%
- UPDATE cargos SET name = '工业硫酸 92.5%' WHERE name = '92%硫酸';
- -- 4. 98%硫酸 → 工业硫酸 98%;98% 工业硫酸:删除
- UPDATE cargos SET name = '工业硫酸 98%' WHERE name = '98%硫酸';
- DELETE FROM cargos WHERE name = '98% 工业硫酸';
- -- 5. 硫磺酸 → 硫磺酸 98%
- UPDATE cargos SET name = '硫磺酸 98%' WHERE name = '硫磺酸';
- -- ----------------------------------------
- -- 二、删除 name 重复的记录(同一 name 只保留 id 最小的一条)
- -- ----------------------------------------
- DELETE c1 FROM cargos c1
- INNER JOIN cargos c2 ON c1.name = c2.name AND c1.id > c2.id;
- -- ----------------------------------------
- -- 三、硫酸:虚拟删除
- -- ----------------------------------------
- UPDATE cargos SET is_deleted = 1 WHERE name = '硫酸';
|