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

v1uwarro  于 2023-02-03  发布在  Mysql
关注(0)|答案(9)|浏览(215)

我有两张table,看起来都像

id  name  value
===================
1   Joe     22
2   Derk    30

我需要根据每个表中的检查名称将value的值从tableA复制到tableB
对于这个UPDATE语句有什么提示吗?

9ceoxa92

9ceoxa921#

除此答案外,如果您需要根据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'
uhry853o

uhry853o2#

您需要连接这两个表:
例如,您希望将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'
    • 更新1**
UPDATE tableB t1 
        INNER JOIN tableA t2 
             ON t1.id = t2.id
SET t1.name = t2.name
    • 更新2**
UPDATE tableB t1 
        INNER JOIN tableA t2 
             ON t1.name = t2.name
SET t1.value = t2.value
csga3l58

csga3l583#

第二种可能是

UPDATE TableB 
SET TableB.value = (
    SELECT TableA.value 
    FROM TableA
    WHERE TableA.name = TableB.name
);
htzpubme

htzpubme4#

UPDATE    cities c,
          city_langs cl
    SET       c.fakename = cl.name
   WHERE     c.id = cl.city_id
lsmd5eda

lsmd5eda5#

如果您使用的是安全更新模式(并且您会收到一个错误消息,表明您试图更新一个没有使用KEY列的WHERE的表),那么第二个选项也是可行的,方法是添加:

UPDATE TableB  
SET TableB.value = (  
SELECT TableA.value  
    FROM TableA  
    WHERE TableA.name = TableB.name  
)  
**where TableB.id < X**  
;
xdnvmnnf

xdnvmnnf6#

将数据存储在临时表中

Select * into tempTable from table1

现在更新列

UPDATE table1
    SET table1.FileName = (select FileName from tempTable where tempTable.id = table1.ID);
oalqel3c

oalqel3c7#

在我的例子中,可接受的解决方案太慢了,对于一个有180K行的表,更新速率大约是每秒10行,这是连接元素上的索引。
我最终使用一个程序解决了我的问题:

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

我希望它能像帮助我一样帮助将来的人

watbbzwu

watbbzwu8#

更新表A设置值=表B.来自表B的值,其中tableA.name=表B.名称

zpf6vheq

zpf6vheq9#

如果你有共同的字段在两个表,那么它是如此容易!....
表-1 =要更新的表。表-2 =要获取数据的表。
1.查询表-1,找到常用字段值。
1.循环一次,根据表1的值从表-2中找出所有数据。
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();
    }

}

相关问题