如何根据另一个 table 的数据更新一个 table?

How to update one table based on the data of an other table?

我在 mySQL 中有以下 2 个表格。我想用 table_2 的数据更新 table_1 如果该数据不存在于 table_1 中或数据已更改。

这些是我的表格:

table_1:

id    name    desc     price 
------------------------------
1     a       audi        100
2     b       bmw         221
3     c       mercedes    331 

table_2:

id    name    desc      price
------------------------------
1     a       audi         1200
2     b       bmw          250
3     c       mercedes     500
4     d       opel         400
5     e       volkswagen   340

我想要的输出是:

table_1

id    name    desc      price
------------------------------
1     a       audi         1200
2     b       bmw          250
3     c       mercedes     500
4     d       opel         400
5     e       volkswagen   340

这是我试过的:

UPDATE table_1
   SET (name, desc) = (SELECT table_2.name, table_2.desc
                         FROM table_2 t2
                        WHERE table_1.id = table_2.id)
 WHERE EXISTS (
    SELECT 1
      FROM table_2
     WHERE table_1.id = table_2.id )

这是我得到的:

Error Code: 1064. You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '(name, desc) = (SELECT table_2.name, table_2.desc                          FROM ' at line 2    0.000 sec

**请注意,我的桌子实际上要大得多。 PS 我正在使用 Toad。

使用 INSERT on DUPLICATE 机制可以在一个非常简洁的查询中完成此操作

INSERT INTO table_1 (`id`, `name`,`desc`,`price`)
    (
     SELECT `t2`.`id`, `t2`.`name`, `t2`.`desc`, `t2`.`price` 
     from table_2 t2 
     where id = t2.id
    )
ON DUPLICATE KEY UPDATE `name`=`t2`.`name`, 
                        `desc`=`t2`.`desc`, 
                        `price`=`t2`.`price`;