简体   繁体   English

mysql 使用另一个表中的值更新列

[英]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 的valuetableA复制到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 = 您从中获取数据的表。

  1. make query in Table-1 and find common field value.在表 1 中进行查询并找到公共字段值。
  2. make a loop and find all data from Table-2 according to table 1 value.进行循环并根据表 1 的值从表 2 中查找所有数据。
  3. again make update query in table 1.再次在表 1 中进行更新查询。

$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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM