Ваш подход не работает, потому что результат записывается фактически в конце оператора, а не после обработки каждой строки.Таким образом, каждый раз при обработке строки заменяется только символ, присоединенный к этой строке.В следующей строке исходная строка снова берется в качестве источника, а замена из предыдущей строки забывается, поэтому вы фактически никогда не заменяете все символы.
Что вам нужно сделать, это обновить таблицу несколько раз, каждый разс другой строкой из T2.Или, что еще лучше, вам нужно создать себе утверждение со всеми записями из T2, если их не слишком много.
Вы можете создать такое утверждение, как это:
select concat(
repeat('replace(', count(*))
, 't1.Short, '
, group_concat(concat('\'', HTML, '\',\'', Symbol, '\')'))
)
from t2;
, которое возвращает
replace(replace(replace(t1.Short, '™','™'),'®','®'),'©','©')
( sqlfiddle )
Либо используйте это для построения строки для динамического sql (подробнее об этом здесь ), либо простособерите его один раз, скопируйте и выполните ваш запрос.Ваш запрос будет
update T1 set
Short = replace(replace(replace(T1.Short, '™','™'),'®','®'),'©','©'),
Long = replace(replace(replace(T1.Long, '™','™'),'®','®'),'©','©');