-1

我有以下表格..

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     
    ...    ...   
4

2 回答 2

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 演示在这里:http: //sqlfiddle.com/#!2/6203f/1

笔记:

示例数据显示唯一更新的 table_b 行是id_B = 4. 即使在 table_a 中有关联的行,行(5,'val3')和也不会改变。(6,null)

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

表和列的相当奇怪的命名以及令人困惑的相似值使得该示例难以破译。

跟进

问: 如果我拥有的列不止一个?我怎么能设置?

答:要更新同一语句中的附加列,请在 SET 子句中包含对该列的表达式分配。有关详细信息,请参阅 MySQL 文档中的“多表语法”。

MySQL 文档在这里:http://dev.mysql.com/doc/refman/5.5/en/update.html

于 2013-08-09T15:02:07.443 回答
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
于 2013-08-09T14:51:27.863 回答