我正在尝试在同一个表中重复行。表 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
重新计算的子查询 - 或者更一般地说:由于没有 auto_increment,我的表中出现重复行
最佳答案
您尝试过使用变量吗?
SET @max=SELECT MAX(id);
INSERT INTO A (id, foreign_id, value)
SELECT @max:=@max+1, 2, value
FROM A WHERE foreign_id = 1;
关于mysql - 重新评估每个 INSERT 的 MySQL 子查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8678882/