很抱歉提出一个微不足道的问题。我想翻译我的数据库中有一百万行的一些字段。所以我想做的是 读取字段1并执行转换功能并将其写入字段3,并且需要将字段2分别写入字段4。
初始表
field id | field 1 | field 2 | field 3 | field 4 |
1 |苹果|梨|空|空|
2 |香蕉|菠萝|空|空|
最终结果表翻译(苹果) - yabloko
字段id |字段1 |字段2 |字段3 |字段4 |
1 |苹果|梨| yablogo | grusha |
2 |香蕉|菠萝|巴南|凤梨|
我已经有了翻译功能,问题是如何执行 这一百万行。如何正确构建循环? (肯定会丢失一些ID,因为删除了一些数据)。
提前非常感谢!!!
答案 0 :(得分:0)
规范模式不是“构造循环”并逐行处理,而是在单个语句中执行操作。
我会填充一个翻译表:
CREATE TABLE my_translation
( old_word VARCHAR(100) NOT NULL PRIMARY KEY
, new_word VARCHAR(100)
) Engine=InnoDB;
INSERT INTO my_translation (old_word, new_word) VALUES
('apple' ,'yablogo')
,('pear' ,'grush')
,('banana' ,'banan')
,('pineapple','ananas);
然后进行更新。如果没有匹配,那么棘手的部分是field_3
和field_4
未经修改。
UPDATE my_table t
LEFT
JOIN my_translation c3
ON c3.old_word = t.field_1
LEFT
JOIN my_translation c4
ON c4.old_word = t.field_2
SET t.field_3 = IF(c3.old_word IS NULL,t.field_3,c3.new_word)
, t.field_4 = IF(c4.old_word IS NULL,t.field_4,c4.new_word)
注意:如果这是一次性操作,我可能会考虑将其作为INSERT插入到新表中,然后交换表名并更改外键引用,以将新表放在旧表的位置