-- ============================================================ -- 产品表 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 = '硫酸';