更新不会更新整个字符串

Naq*_*lik 7 mysql sql

以下是我的SQL小提琴:http://sqlfiddle.com/#!2/ f9bae/1

在其中我试图检查整个名称是否正在通过查找表进行验证,如果有任何错误,那么它应该被正确的值替换,但我面临的问题是,如果任何名称包含多个错误值然后查询只更新该名称的一部分并保持其余部分不变,请告诉我如何修改我的查询更新,以便它根据查找表正确值更新整个名称.

谢谢,

val*_*lex 2

这是一个SQLFIdle 演示

此 UGLY 查询适用于字符串中最多 4 次替换。如果您需要更多替换,最好的方法是创建一个用户定义函数来替换一个字符串中的这些单词并使用它进行更新。

 UPDATE table1 a 
  LEFT JOIN lookup b1 on a.username LIKE CONCAT('%', b1.`WRONG`, '%')
  LEFT JOIN lookup b2 on a.username LIKE CONCAT('%', b2.`WRONG`, '%') 
            and (b2.Wrong not in (b1.Wrong))
  LEFT JOIN lookup b3 on a.username LIKE CONCAT('%', b3.`WRONG`, '%') 
            and (b3.Wrong not in (b1.Wrong,b2.Wrong))
  LEFT JOIN lookup b4 on a.username LIKE CONCAT('%', b4.`WRONG`, '%') 
            and (b4.Wrong not in (b1.Wrong,b2.Wrong,b3.Wrong))

SET a.username = 
REPLACE(
  REPLACE(
      REPLACE(
           REPLACE(a.username, IFNULL(b1.`WRONG`,''), IFNULL(b1.`RIGHT`,''))
        , IFNULL(b2.`WRONG`,''), IFNULL(b2.`RIGHT`,''))
    , IFNULL(b3.`WRONG`,''), IFNULL(b3.`RIGHT`,''))
  , IFNULL(b4.`WRONG`,''), IFNULL(b4.`RIGHT`,''))
Run Code Online (Sandbox Code Playgroud)