业务实现

1. 连表修改

  1. UPDATE
  2. 1 as o1 ,
  3. (
  4. SELECT temp1.objId, temp1.objName, temp1.oDepId, temp1.oDepName, temp1.newDepName, dd.id as depId, dd.name as depName
  5. FROM
  6. (SELECT o.id as objId, o.name as objName, o.depId as oDepId, d.name as oDepName, CONCAT('上海市',d.name) as newDepName
  7. FROM 1 o INNER JOIN 3 d ON o.depId = d.id) as temp1 LEFT JOIN 2 dd ON temp1.newDepName = dd.name
  8. ) as temp2 SET o1.depId = temp2.depId WHERE o1.id = temp2.objId AND temp2.depId != '' AND temp2.depId IS NOT NULL;

2. 存储过程-sql中循环操作

  1. DELIMITER $$
  2. DROP PROCEDURE if EXISTS dealCooperateDepIds; # 如果存在dealCooperateDepIds存储过程则删除
  3. CREATE procedure dealCooperateDepIds() # 创建无参存储过程,名称为dealCooperateDepIds
  4. BEGIN
  5. DECLARE i INT; # 申明变量
  6. SET i = (SELECT count(*)
  7. FROM
  8. 1 p
  9. LEFT JOIN
  10. 2 d
  11. ON INSTR(p.cooperateDepIds,d.id) > 0
  12. WHERE d.id != '' AND d.id IS NOT NULL); # 变量赋值
  13. WHILE i != 0 DO # 结束循环的条件
  14. UPDATE 1 cp,
  15. (
  16. SELECT p.id, p.taskName, p.cooperateDepIds, d.id as did, d.`name` as dname, d.new_id, d.new_name
  17. FROM
  18. 1 p
  19. LEFT JOIN
  20. 2 d
  21. ON INSTR(p.cooperateDepIds,d.id) > 0
  22. WHERE d.id != '' AND d.id IS NOT NULL
  23. ) as temp SET cp.cooperateDepIds = REPLACE(cp.cooperateDepIds,temp.did,temp.new_id) WHERE cp.id = temp.id; # 修改数据
  24. SET i = (SELECT count(*)
  25. FROM
  26. 1 p
  27. LEFT JOIN
  28. 2 d
  29. ON INSTR(p.cooperateDepIds,d.id) > 0
  30. WHERE d.id != '' AND d.id IS NOT NULL); # 循环一次,i更新
  31. END WHILE; # 结束while循环
  32. END $$ # 结束定义语句
  33. DELIMITER ; # 重新将分隔符设置为;
  34. CALL dealCooperateDepIds(); #调用存储过程