如何在MySQL中使用表达式进行Update

在生成学号的业务中,需要根据指定的表达式模板来生成学号,比如:

{Year}{ProCode}{ClassCode}{StuType}{StuInd}

用大括号括起来的表示变量

其中Year表示年份,ProCode表示专业代码,ClassCode表示班级代码,StuType表示学生类型代码,StuInd表示学生序号

目前的做法:

UPDATE stu
SET stuCode = REPLACE(REPLACE(REPLACE(#(tmp), '{Year}', stu.year), '{ProCode}', stu.proCode), '{ClassCode}', stu.classCode)...

由于表达式中的变量都来自数据库,所以没办法在语句外面使用enjoy,只能笨拙的使用mysql的update,有几个变量就嵌套几次

请问这种情况有没有更好的解决办法 @JFinal

评论区

JFinal

2019-09-16 11:52

stuCode 是一个字段,为啥不先为这个字段生成好值以后,一次性 update stu set stuCode #(stuCode) where ....

netwild

2019-09-16 14:13

@JFinal 因为每次update都有几千或者更多的数据,使用遍历update ...where ...的话性能会有问题。
我刚进行了优化,先把要update的select到List里,然后遍历这个list,先求出每个stuCode的值,最后再用Db.update(List),虽然性能没有直接在sql里写update批量的好,但为了需求也只能妥协了。