根据mysql中另一个表中的值更新一个表中的多个列

时间:2014-03-07 21:29:13

标签: mysql sql-update

我有一个tableA,它拥有4000万条记录。它有这种结构

Id A B C
1 N O 10
1 N O 20
2 B G 15
2 B G 25
3 E U 50
3 E U 60

我需要根据tableB中的值(其中id是唯一的)更改tableA中A列和B列中的值。表B看起来像这样

Id A B
1 V M
2 Q W
3 E U

因此以表A的结果结束

Id A B C
1 V M 10
1 V M 20
2 Q W 15
2 Q W 25
3 E U 50
3 E U 60

由于Id = 3在表A和表B中是相同的,我宁愿避免从B写入A到那些记录,认为这样会更有效吗?

我按照这些思路思考

UPDATE tableA
SET A = (SELECT A
         FROM tableB
         WHERE tabelA.id = tableB.id)

但不确定何时我需要在同一步骤中更新多个列,并且仅在tableA和tableB之间的数据确实不同时才更新。

3 个答案:

答案 0 :(得分:2)

您可以使用多表UPDATE语法来连接表:

UPDATE tableA JOIN tableB USING (Id)
SET    tableA.A = tableB.A,
       tableA.B = tableB.B

sqlfiddle上查看。

答案 1 :(得分:0)

Update A a
inner join B b on a.id = b.id
set a.A = b.A, 
    a.B = b.B
WHERE a.A <> b.A and a.B <> b.B

答案 2 :(得分:0)

为此查询使用此查询,但是您必须根据需要设置位置条件

 update  tabe2 set subject_id = (SELECT GROUP_CONCAT(sub_id SEPARATOR ', ') as sub_id FROM tabe1)