mysql更新列,其中包含来自另一个表的值

Leo*_*Sam 203 mysql sql sql-update

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

id  name  value
===================
1   Joe     22
2   Derk    30
Run Code Online (Sandbox Code Playgroud)

我需要的值复制valuetableAtableB基于每个表检查名称.

这个UPDATE陈述的任何提示?

Raf*_*shi 383

除了这个答案,如果你需要动态地根据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'
Run Code Online (Sandbox Code Playgroud)

  • 有没有办法使用别名来做到这一点? (2认同)

Joh*_*Woo 151

你需要加入这两个表:

例如,您希望将nametableA 的值复制到tableB它们具有相同位置的位置ID

UPDATE tableB t1 
        INNER JOIN tableA t2 
             ON t1.id = t2.id
SET t1.name = t2.name 
WHERE t2.name = 'Joe'
Run Code Online (Sandbox Code Playgroud)

更新1

UPDATE tableB t1 
        INNER JOIN tableA t2 
             ON t1.id = t2.id
SET t1.name = t2.name 
Run Code Online (Sandbox Code Playgroud)

更新2

UPDATE tableB t1 
        INNER JOIN tableA t2 
             ON t1.name = t2.name
SET t1.value = t2.value
Run Code Online (Sandbox Code Playgroud)


Sam*_*vic 84

第二种可能性是,

UPDATE TableB 
SET TableB.value = (
    SELECT TableA.value 
    FROM TableA
    WHERE TableA.name = TableB.name
);
Run Code Online (Sandbox Code Playgroud)

  • 是的,这种方法很好但在大型数据集上非常非常慢.如果您正在使用小表,这种方法很好但我推荐如上所示的JOIN用于其他任何方法. (8认同)
  • 是的,当我们需要的是用另一个表中的值更新字段时,不需要复杂的连接. (7认同)

ait*_*lla 5

    UPDATE    cities c,
          city_langs cl
    SET       c.fakename = cl.name
   WHERE     c.id = cl.city_id
Run Code Online (Sandbox Code Playgroud)

  • 这是最简单的。 (3认同)