我有两个mysql表
Component
+----+-------------------------+--------+
| OldComponentId | NewComponentId |
+----+-------------------------+--------+
| 15 | 85 |
| 16 | 86 |
| 17 | 87 |
+----+-------------------------+--------+
Formulae
+----+-------------------------+--------+
| id | formula_string |
+----+-------------------------+--------+
| 1 | A+15-16+17 |
| 2 | 16+15-17 |
+----+-------------------------+--------+
I want to replace value of formula_string on the basis of NewComponentId as
Formulae
+----+-------------------------+--------+
| id | formula_string |
+----+-------------------------+--------+
| 1 | A+85-86+87 |
| 2 | 86+85-87 |
+----+-------------------------+--------+
我尝试过以下mysql查询,但它无法正常工作
更新公式fr,组件comp set formula_string = REPLACE(fr.formula_string,comp.OldComponentId,comp.NewComponentId)。
请建议解决方案
感谢。
答案 0 :(得分:0)
没有简单的方法可以做到这一点。正如您在更新声明中所观察到的那样,替换不会嵌套。他们只是一次更换一个。
您可以做的一件事是:
update Formulae fr cross join
Component comp
set formula_string = REPLACE(fr.formula_string, comp.OldComponentId, comp.NewComponentId)
where formula_string like concat('%', comp.OldComponentId, '%')
然后继续运行此操作,直到row_count()
返回0
。
请注意,您的结构可能会导致无限循环(如果A - > B和B - > A)。你也有一个混乱的问题"所以10将被替换为100.这表明您的整体数据结构可能不正确。也许你应该将公式分解成单独的部分。如果它们只是数字+
和-
,则可以使用包含每个组件的值和符号的联结表。然后你的查询就会容易得多。