我想从表 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';
如果我想使用 UPDATE
或 ON 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);
如果 table1
与 table2
中的一行同名,则其他列将被复制到该行中。
您不需要在 ON DUPLICATE KEY
中包含 name
列。它已经具有来自另一个表的值,因为这是使它重复的原因。
关于mysql - 如何在 INSERT SELECT 语句中使用 UPDATE,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55836609/