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

问题描述 投票:0回答:8

我有两张桌子,看起来都像

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

我需要根据每个表中的检查名称将

value
的值从
tableA
复制到
tableB

对于这个

UPDATE
声明有什么建议吗?

mysql sql sql-update
8个回答
600
投票

除了这个答案之外,如果您需要根据 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'

213
投票

您需要连接两个表:

例如,您想要将

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

120
投票

第二种可能性是,

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

33
投票
    UPDATE    cities c,
          city_langs cl
    SET       c.fakename = cl.name
   WHERE     c.id = cl.city_id

4
投票

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

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

3
投票

将数据存储在临时表中

Select * into tempTable from table1

现在更新专栏

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

2
投票

就我而言,接受的解决方案太慢了。对于具有 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

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


0
投票
UPDATE tbl1 
SET tbl1.columnName = (
    SELECT tbl2.columnName  
    FROM tbl2
    WHERE tbl2.id = tbl1.user_id 
);
//WHERE tbl1.id = 7;
© www.soinside.com 2019 - 2024. All rights reserved.