[英]mysql update column with value from another table
I have two tables, both looking like我有两张桌子,看起来都像
id name value
===================
1 Joe 22
2 Derk 30
I need to copy the value of value
from tableA
to tableB
based on check name in each table.我需要根据每个表中的检查名称将 value 的
value
从tableA
复制到tableB
。
Any tips for this UPDATE
statement?此
UPDATE
语句的任何提示?
In addition to this answer if you need to change tableB.value according to tableA.value dynamically you can do for example:除了这个答案,如果您需要根据 tableA.value 动态更改 tableB.value,您可以执行以下操作,例如:
UPDATE tableB
INNER JOIN tableA ON tableB.name = tableA.name
SET tableB.value = IF(tableA.value > 0, tableA.value, tableB.value)
WHERE tableA.name = 'Joe'
you need to join the two tables:你需要加入这两个表:
for instance you want to copy the value of name
from tableA into tableB
where they have the same ID
例如,您想将
name
的值从 tableA 复制到tableB
,它们具有相同的ID
UPDATE tableB t1
INNER JOIN tableA t2
ON t1.id = t2.id
SET t1.name = t2.name
WHERE t2.name = 'Joe'
UPDATE 1更新 1
UPDATE tableB t1
INNER JOIN tableA t2
ON t1.id = t2.id
SET t1.name = t2.name
UPDATE 2更新 2
UPDATE tableB t1
INNER JOIN tableA t2
ON t1.name = t2.name
SET t1.value = t2.value
Second possibility is,第二种可能是
UPDATE TableB
SET TableB.value = (
SELECT TableA.value
FROM TableA
WHERE TableA.name = TableB.name
);
UPDATE cities c,
city_langs cl
SET c.fakename = cl.name
WHERE c.id = cl.city_id
The second option is feasible also if you're using safe updates mode (and you're getting an error indicating that you've tried to update a table without a WHERE that uses a KEY column), by adding:如果您使用安全更新模式(并且您收到一个错误,表明您尝试更新没有使用 KEY 列的 WHERE 的表),第二个选项也是可行的,添加:
UPDATE TableB
SET TableB.value = (
SELECT TableA.value
FROM TableA
WHERE TableA.name = TableB.name
)
**where TableB.id < X**
;
Store your data in temp table将您的数据存储在临时表中
Select * into tempTable from table1
Now update the column现在更新列
UPDATE table1
SET table1.FileName = (select FileName from tempTable where tempTable.id = table1.ID);
In my case, the accepted solution was just too slow.就我而言,公认的解决方案太慢了。 For a table with 180K rows the rate of updates was about 10 rows per second.
对于具有 180K 行的表,更新速率约为每秒 10 行。 This is with the indexes on the join elements.
这是连接元素上的索引。
I finally resolved my issue using a procedure:我终于使用一个程序解决了我的问题:
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
I hope it will help someone in the future like it helped me我希望它会帮助将来的某个人,就像它对我的帮助一样
update tableA set value = tableB.value from tableB where tableA.name =tableB.name更新 tableA set value = tableB.value from tableB where tableA.name =tableB.name
If you have common field in both table then it's so easy !....如果您在两个表中都有共同的字段,那就太容易了!....
Table-1 = table where you want to update.表 1 = 要更新的表。 Table-2 = table where you from take data.
表 2 = 您从中获取数据的表。
$qry_asseet_list = mysql_query("SELECT 'primary key field' FROM `table-1`");
$resultArray = array();
while ($row = mysql_fetch_array($qry_asseet_list)) {
$resultArray[] = $row;
}
foreach($resultArray as $rec) {
$a = $rec['primary key field'];
$cuttable_qry = mysql_query("SELECT * FROM `Table-2` WHERE `key field name` = $a");
$cuttable = mysql_fetch_assoc($cuttable_qry);
echo $x= $cuttable['Table-2 field']; echo " ! ";
echo $y= $cuttable['Table-2 field'];echo " ! ";
echo $z= $cuttable['Table-2 field'];echo " ! ";
$k = mysql_query("UPDATE `Table-1` SET `summary_style` = '$x', `summary_color` = '$y', `summary_customer` = '$z' WHERE `summary_laysheet_number` = $a;");
if ($k) {
echo "done";
} else {
echo mysql_error();
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.