cargos_product_name_unify.sql 1.9 KB

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