如何在INSERT SELECT语句中使用UPDATE

时间:2019-04-24 18:40:24

标签: mysql database mysql-workbench

我想将记录从table2插入到table1。如果在主键中找到重复项,则需要替换记录。类型string的主键。

所以我的语句看起来像(name是主键,它是stringtable2可能引起重复的行,我想对其进行更新):

INSERT INTO `myscheme1`.`table1`
(`table1`.`name`,
    `table1`.`id`,
    `table1`.`history`)

SELECT `table2`.`name`,
    `table2`.`id`,
    `table2`.`history`
FROM `myscheme2`.`table2`;

在何处添加UPDATE?如果我不能使用UPDATE,能否说明如何使用ON DUPLICATE KEY UPDATE

因为我不知道如何应用它?我不知道应使用哪个主键的新字符串来更新旧的字符串(命令正在读取它,并且我有很多重复的情况)。因此,下面的example:假设我知道如果发生重复,我应该输入什么新值。

我更喜欢使用UPDATE,因此它将自动用新记录替换旧记录。

INSERT INTO 
   devices(name) 
VALUES 
   ('Printer') 
ON DUPLICATE KEY UPDATE name = 'Printer';

如果我想使用UPDATEON DUPLICATE KEY UPDATE,可以请教我如何编辑命令语法吗?

1 个答案:

答案 0 :(得分:1)

无论新值是来自docker network ls NETWORK ID NAME DRIVER SCOPE 90ed18951aa8 bridge bridge local 02a1158b1219 docker-registry_default bridge local myn3onq0xgdg ingress overlay swarm 2t91hityplpb preprod_default overlay swarm 还是ON DUPLICATE KEY UPDATE,您都可以使用SELECT

VALUES

如果INSERT INTO `myscheme1`.`table1` (`table1`.`name`, `table1`.`id`, `table1`.`history`) SELECT `table2`.`name`, `table2`.`id`, `table2`.`history` FROM `myscheme2`.`table2` ON DUPLICATE KEY UPDATE id = VALUES(id), history = VALUES(history); table1中的某行具有相同的名称,则其他列将被复制到该行中。

您不需要在table2中包括name列。它已经具有另一个表中的值,因为这就是使其重复的原因。