Как автоматически увеличить идентификатор в пакетной вставке

У меня есть следующий запрос, который я хочу выполнить

INSERT INTO TableB (ID, Age, RollNo)
SELECT (select (max(id) + 1) from TableB), Age, RollNo
FROM TableA
WHERE Age > 20 AND RollNo < 500

Теперь все новые записи имеют одинаковый идентификатор в таблице B

Я делаю что-то неправильно.

PS Я не могу изменить свойства столбца, я не могу установить значение AUTO-INCREMENT, для него должно быть значение по умолчанию NULL

1 ответ

Решение

Объявить ID колонка в TableB как AUTO_INCREMENT который в конечном итоге послужит этой цели

ALTER TABLE TableB MODIFY COLUMN ID INT auto_increment

В этом случае вы можете сгенерировать эти числа, как

SET @id := (SELECT MAX(ID) FROM TableB);

INSERT INTO TableB (ID, Age, RollNo)
SELECT (@id := @id + 1), Age, RollNo
FROM TableA
WHERE Age > 20 AND RollNo < 500;
Другие вопросы по тегам