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

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

我需要根据每个表中的检查名称将值的值从tableA复制到tableB。

对于这个UPDATE语句有什么建议吗?


当前回答

第二种可能是,

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

其他回答

你需要连接这两个表:

例如,你想把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

除了这个答案,如果你需要改变tableB。值根据表a。值可以动态执行,例如:

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'

第二种可能是,

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

将数据存储在临时表中

Select * into tempTable from table1

现在更新列

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