通过任务表中的部门名称,在部门表中查出id然后在加入任务表中,用顿号隔开如图
sql不好写的,也得有好多判断
有这个时间,还不如写个java小程序,直接update
多表关联查询,然后一个update不就好了。不明白不好写的地方在哪
专门对楼主的需求做了研究,做了函数,然后批量修改就行了,相关表和字段改成楼主的表和字段即可
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
)