我正在尝试在同一个表格中重复行。表A有没有auto_increment (不幸的是)。
INSERT INTO A (id, foreign_id, value)
SELECT (SELECT MAX(id)+1 FROM A), 2, value
FROM A WHERE foreign_id = 1;
但(SELECT MAX(id)+1 FROM A)
计算一次,因此它将始终返回相同的ID。在第二行插入时,查询将失败(重复的主键)。
我先尝试过:
INSERT INTO A (id, foreign_id, value)
SELECT MAX(id)+1, 2, value
FROM A WHERE foreign_id = 1;
但MAX(id)+1
会考虑WHERE foreign_id = 1
,因此我无法保证会获得未使用的ID。
我该如何进行:
INSERT
答案 0 :(得分:2)
您是否尝试过使用变量?
SET @max=SELECT MAX(id);
INSERT INTO A (id, foreign_id, value)
SELECT @max:=@max+1, 2, value
FROM A WHERE foreign_id = 1;
答案 1 :(得分:1)
根据评论,我相信这会有用。 诀窍是您不能使用+1(除非您使用变量),但您可以使用现有ID并将其添加到最大值,每次都会为您提供唯一ID。
INSERT INTO A (id, foreign_id, value)
SELECT (SELECT MAX(id) FROM A)+ID, 2, value
FROM A WHERE foreign_id = 1;