2 qq 38129280 qq_38129280 于 2017.09.08 21:08 提问

数据库批量修改数据,有没有大神帮帮忙,mysql的

通过任务表中的部门名称,在部门表中查出id然后在加入任务表中,用顿号隔开如图图片说明

3个回答

zml_moxueli
zml_moxueli   2017.09.09 09:09

sql不好写的,也得有好多判断
有这个时间,还不如写个java小程序,直接update

linqin107412
linqin107412   2017.09.09 14:52

多表关联查询,然后一个update不就好了。不明白不好写的地方在哪

qq_33727653
qq_33727653   2017.09.09 16:25

专门对楼主的需求做了研究,做了函数,然后批量修改就行了,相关表和字段改成楼主的表和字段即可

 DELIMITER $$ 
 DROP FUNCTION IF EXISTS `func_split_string_to_other`$$   
CREATE FUNCTION `func_split_string_to_other`(v_str varchar(100),v_desc varchar(100)) RETURNS varchar(100) CHARSET utf8    
BEGIN    

          DECLARE i int(4);   
          DECLARE id1 INT DEFAULT 0;
          DECLARE temp varchar(100);
          DECLARE returnStr varchar(100);     
          set i = 1;    
          if(v_str is null or LENGTH(v_str)=0) then    
               return 'error';    
          else    
          while i<= 1+(LENGTH(v_str) - LENGTH(replace(v_str,v_desc,'')))   
          do    
            SELECT id INTO id1 FROM tb_dep WHERE name=REVERSE(SUBSTRING_INDEX(REVERSE(SUBSTRING_INDEX(v_str, v_desc, i)), v_desc, 1));
            IF(returnStr IS NULL) THEN
               set returnStr=id1;
            ELSE 
               SET temp=returnStr;
               set returnStr= CONCAT(temp,v_desc,id1);
            END IF;
          set i = i+1;    
          end while;     
          return returnStr;    
          end if;    
 END$$  
DELIMITER ; 

##修改执行语句
UPDATE tb_dep_relation t1
SET t1.dep_ids=(
              SELECT t2.ids FROM( SELECT id, func_split_string_to_other(dep_names,',') as ids  FROM tb_dep_relation) t2 WHERE 
          t2.id=t1.id
           )

图片说明
图片说明

Csdn user default icon
上传中...
上传图片
插入图片