如何对多个记录使用 ON DUPLICATE KEY 为每个记录创建一个新记录(如果不存在)



我正在使用INSERT INTO语句来创建记录。 当存在DUPLICATE KEY错误时,我使用ON DUPLICATE KEY UPDATE语句创建具有不同编号的新记录。

示例(假设重复键仅在名称上(:

`table1` 
(name, id, timestamp) 
John, 300, 16:30 
Patrick, 400, 17:20
`table2` 
(name, id, timestamp)
John, 300, 18:00
Patrick, 400, 5:00
John, 300, 4:00
John, 300, 3:00
John, ...
INSERT INTO `table1` (name, id, timestamp)
SELECT `table2`.`name`, `table2`.id`, unix_timestamp()
FROM `table2`
WHERE `name` = "John"
ON DUPLICATE KEY UPDATE `table2`.id`+1

目前为止,一切都好。在table1创建一个新记录;John, 301, 18:00.

但是当table2有多个John时,它UPDATE(INSERT(第一个John然后结束。

我希望ON DUPLICATE KEY UPDATE继续尝试使用新 id,因为 301 确实已经存在,最多尝试次数为 5 次。

下一条记录应查看是否已经存在具有John 300的记录。如果是这样,请检查 301,如果是,请检查 302,重复直到 306 并INSERT第一次机会。

您可以使用两个表之间的联接来创建新 ID。

INSERT INTO table1 (name, id, timestamp)
SELECT t2.name, IF(t1.maxid IS NULL, t2.id, t1.maxid + 1), unix_timestamp()
FROM table2 AS t2
LEFT JOIN (
SELECT name, MAX(id) AS maxid
FROM table1
GROUP BY name) AS t1 ON t1.name = t2.name
WHERE t1.maxid IS NULL OR t1.maxid < t2.id + 5

最新更新