Я пытаюсь сделать SQL-запрос, используя INSERT INTO, чтобы скопировать ряд строк из таблицы, но я хочу, чтобы одно из полей (которое не является первичным ключом) имело новый, уникальный, int (я знаю это ужасный дизайн базы данных, но я не могу изменить структуру БД).
Вот упрощенный пример того, что я пытаюсь сделать:
INSERT INTO Mytable
(field1
,field2
,field3
,nonKeyUniqueInt)
SELECT
(field1
,field2
,field3
,(SELECT MAX(nonKeyUniqueInt)+1 FROM mytable)
FROM
mytable
WHERE
(conditions)
Однако это не работает, потому что запрос SELECT MAX выполняется только один раз, давая всем моим новым строкам одно и то же значение для этого поля. Учитывая следующие строки для копирования:
field1 field2 field3 nonKeyUniqueInt x y z 1 a b c 2
Я получаю вывод:
field1 field2 field3 nonKeyUniqueInt x y z 1 a b c 2 x y z 3 a b c 3
Возможно ли то, что я пытаюсь сделать?
SELECT MAX(...) + n
обычно плохо сочетается с параллелизмом. Как насчет чего-то вродеSEQUENCE
? Или вы не хотите поддерживать глобальный объект? - person Clockwork-Muse   schedule 05.11.2014