我正在使用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