Я пытаюсь дублировать строки в той же таблице. Таблица 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)
рассчитывается один раз, поэтому он всегда будет возвращать один и тот же идентификатор. При вставке второй строки запрос не будет выполнен (повторяется первичный ключ).
Сначала я попробовал:
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
, поэтому нет гарантии, что я получу неиспользуемый идентификатор.
Как я могу перейти к:
- Иметь подзапрос, который пересчитывается для каждого
INSERT
- Или, в более общем случае: повторяющиеся строки в моей таблице, если нет auto_increment