mysql - 如何在 INSERT SELECT 语句中使用 UPDATE

标签 mysql database mysql-workbench

我想从表 2 中插入记录到表 1。如果在主键中发现重复项,我需要替换记录。 string 类型的主键。

所以我的语句看起来像(name 是主键,它是一个 string。重复的行可能来自 table2,这是我想要的更新):

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,你能告诉我如何编辑我的命令语法吗?

最佳答案

无论新值来自 SELECT 还是 VALUES,您都可以以相同的方式使用 ON DUPLICATE KEY UPDATE

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);

如果 table1table2 中的一行同名,则其他列将被复制到该行中。

您不需要在 ON DUPLICATE KEY 中包含 name 列。它已经具有来自另一个表的值,因为这是使它重复的原因。

关于mysql - 如何在 INSERT SELECT 语句中使用 UPDATE,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55836609/

相关文章:

mysql - 尝试将坐标从 .txt 文件加载到 MySQL 时出错

MySQL Workbench 不在 Canvas 上显示标题

MySQL Workbench 更改错误?

MySQL 查找与另一个表中的记录关联的最小和最大日期

database - 在存储过程中动态填充 Oracle 游标

c# - Win Form App,安装后数据库一般保存在哪里?

php - MYSQL 即使使用 DISTINCT 也加入重复结果

php - 将数组输入表 PHP

php - 从mysql数据库获取 parent 姓名

mysql - MySQL 的数据库映射工具,以帮助从一个数据库迁移到另一个数据库?