以下是我的SQL小提琴: http://sqlfiddle.com/#!2/f9bae/1
我正在尝试检查整个名称是否正在通过查找表进行验证,如果有任何错误,那么它应该被正确的值替换,但我面临的问题是,如果任何名称包含更多比一个错误的值然后查询只更新该名称的一部分并保持其余部分不变,请告诉我如何修改我的查询更新,以便它将根据查找表正确的值更新整个名称。
谢谢,
答案 0 :(得分:2)
此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`,''))
答案 1 :(得分:0)
使用您的设置可能更容易将更新运行3次,这将处理重复。另一方面,与chodry相比,chaudhary或choudhary可能更合适:)
http://sqlfiddle.com/#!2/2d4c6/1
编辑:如果您没有太多条目,您可以删除查找表: -