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
8条答案
按热度按时间bkkx9g8r1#
除此之外,如果需要根据tablea.value动态更改tableb.value,您还可以执行以下操作,例如:
tjrkku2a2#
您需要连接两个表:
例如,要复制
name
从表格到tableB
在那里他们有相同的ID
```UPDATE tableB t1
INNER JOIN tableA t2
ON t1.id = t2.id
SET t1.name = t2.name
WHERE t2.name = 'Joe'
UPDATE tableB t1
INNER JOIN tableA t2
ON t1.id = t2.id
SET t1.name = t2.name
UPDATE tableB t1
INNER JOIN tableA t2
ON t1.name = t2.name
SET t1.value = t2.value
vdzxcuhz3#
第二种可能性是,
k5ifujac4#
t2a7ltrp5#
如果您使用的是安全更新模式(并且收到一个错误,表明您试图更新一个没有使用键列的where的表),那么第二个选项也是可行的,方法是添加:
mftmpeh86#
将数据存储在临时表中
现在更新列
4jb9z9bj7#
就我而言,公认的解决方案太慢了。对于一个有180k行的表,更新速度大约是每秒10行。这与join元素上的索引有关。
我最终通过一个程序解决了我的问题:
我希望它将来能像帮助我一样帮助别人
5lhxktic8#
如果两个表中都有公共字段,那么就太简单了!。。。。
table-1=要更新的表。table-2=从中获取数据的表格。
在表1中进行查询并找到公共字段值。
做一个循环,根据表1的值从表2中找到所有数据。
再次在表1中进行更新查询。