如何将mysql表从一个表更新到另一个表?

时间:2013-08-09 14:29:04

标签: mysql sql-update sql-insert

我有以下表格..

Table A:

id_A    col1
 1      val1
 2      val2
 3      val3
 ...    ....

Table B:

id_B   col2   
 4     val2    
 5     val3     
 6     null     
...    ...      

Table C:

id_A    id_B
 1      4
 2      5
 3      6
 ...    ....

我需要的是,我想从表-A复制到表-B。我怎么做? 请帮忙?

* *如何将表A id_A 1更新为表B?根据表C,id_A 1 == id_B 4,**

从上面的查询输出将是......

表B将更新......

表B:

 id_B   col2   
     4     val1   // here is changed because updated from table A    
     5     val3     
     6     null     
    ...    ...   

2 个答案:

答案 0 :(得分:1)

如果这样可行,那就很简单了

UPDATE tableB b, (SELECT id_A AS id_prov ,a.val FROM tableA a, tableC c 
WHERE    a.id_A=c.id_A ) a
SET b.val=a.val WHERE id_B=id_prov

答案 1 :(得分:1)

这将使用table_a.col1中的关联值更新table_b.col2:

UPDATE table_b b
  JOIN table_c c
    ON c.id_B = b.id_B
  JOIN table_a a
    ON a.id_A = c.id_A
   SET b.col2 = a.col1
 WHERE b.id_B = 4

SQL Fiddle Demo here: http://sqlfiddle.com/#!2/6203f/1

注意:

示例数据显示更新的唯一table_b行为id_B = 4。即使table_a中存在关联的行,行(5,'val3')(6,null)也保持不变。

上述查询中WHERE子句的目的是防止更新id_B = 4以外的行。

表和列的相当奇怪的命名以及容易混淆的相似值使得该示例难以破译。

<强>后续

问:如果我的列多于一个?我怎么能设置?

A:要更新同一语句中的其他列,请在SET子句中包含对该列的表达式赋值。有关详细信息,请参阅MySQL文档中的“多表语法”。

MySQL Documentation here: http://dev.mysql.com/doc/refman/5.5/en/update.html