CREATE DEFINER=`my_procedure`@`%` PROCEDURE `rescue`()
BEGIN
declare str VARCHAR(255) default '';
DECLARE n INT DEFAULT 0;
DECLARE i INT DEFAULT 0;
DECLARE cur_name VARCHAR(45) DEFAULT '';
DECLARE cur_value VARCHAR(10000) DEFAULT '';
SELECT COUNT(*) FROM tableA INTO n;
SET i=0;
WHILE i<n DO
SELECT namea,valuea FROM tableA limit i,1 INTO cur_name,cur_value;
UPDATE tableB SET nameb=cur_name where valueb=cur_value;
SET i = i + 1;
END WHILE;
END
9条答案
按热度按时间9ceoxa921#
除此答案外,如果您需要根据tableA.value动态更改tableB.value,您还可以执行以下操作:
uhry853o2#
您需要连接这两个表:
例如,您希望将
name
的值从tableA复制到tableB
,其中它们具有相同的ID
csga3l583#
第二种可能是
htzpubme4#
lsmd5eda5#
如果您使用的是安全更新模式(并且您会收到一个错误消息,表明您试图更新一个没有使用KEY列的WHERE的表),那么第二个选项也是可行的,方法是添加:
xdnvmnnf6#
将数据存储在临时表中
现在更新列
oalqel3c7#
在我的例子中,可接受的解决方案太慢了,对于一个有180K行的表,更新速率大约是每秒10行,这是连接元素上的索引。
我最终使用一个程序解决了我的问题:
我希望它能像帮助我一样帮助将来的人
watbbzwu8#
更新表A设置值=表B.来自表B的值,其中tableA.name=表B.名称
zpf6vheq9#
如果你有共同的字段在两个表,那么它是如此容易!....
表-1 =要更新的表。表-2 =要获取数据的表。
1.查询表-1,找到常用字段值。
1.循环一次,根据表1的值从表-2中找出所有数据。
1.再次在表1中进行更新查询。