Добавьте значения в таблицу1 для каждого элемента из таблицы2 и используйте MAX (идентификатор) + 1 из таблицы1 в качестве идентификатора таблицы2 - PullRequest
0 голосов
/ 18 октября 2018

У меня есть table1 и table2, и я хочу сделать что-то вроде следующего:

INSERT INTO table1 (ID, OWNER_ID, NAME) SELECT (SELECT MAX(ID) FROM table1) + 1, ID, 'value' FROM table2

Приведенный выше запрос не работает и возвращает:

Unique index or primary key violation: "PRIMARY KEY ON PUBLIC.table1(ID)"; SQL statement:

Любая помощьпожалуйста?

table1:

| ID | OWNER_ID | NAME |
| --- | ---- | --- |

ŧable2:

| ID | OWNER_ID_REF | NAME |
| --- | ---- | --- |

Спасибо

Ответы [ 3 ]

0 голосов
/ 18 октября 2018

Вы используете SELECT (ВЫБЕРИТЕ МАКС. (ID) ИЗ таблицы1) + 1, ID, «значение» ИЗ таблицы2

Когда вы вставляете через, выберите Макс. (ID) +1дать пример значения всем записям для таблицы 2

Использовать что-то вроде этого ...

Создать таблицу #tt (id int первичный ключ, Имя varchar (200))

объявлять@vaue int = (выберите max (id) из #tt)

вставить в #tt select row_number () over (упорядочить по id) + @vaue, имя из # tt

0 голосов
/ 18 октября 2018
set @i:=(SELECT MAX(ID) FROM table1);
INSERT INTO table1 (ID, OWNER_ID, NAME) SELECT @i:=@i+1, ID, 'value' FROM table2

попробуйте этот запрос, он будет работать нормально

0 голосов
/ 18 октября 2018

Похоже, ID - это столбец первичного ключа в table1.Ваша текущая вставка, скорее всего, будет вставлять одно и то же значение ID несколько раз, поскольку подзапрос max будет иметь одинаковое значение для каждой записи в table2.Предполагая, что ID является автоинкрементом, вам, вероятно, не следует присваивать ему значение в любом случае.Вот один из вариантов:

INSERT INTO table1 (OWNER_ID, NAME)
SELECT ID, 'value'
FROM table2;
...