Скопируйте данные из таблицы в ту же таблицу с другим ключом
Мне было любопытно, можно ли было взять данные из таблицы и продублировать их, но назначить новый первичный ключ
например, я хочу взять данные со столбцом "question_id", который действует как уникальный ключ для таблицы, и скопировать все данные из таблицы с этим question_id в ту же таблицу, но с новым question_id.
какие-либо мысли относительно того, возможно ли это с помощью SQL?
моя база данных является базой данных ingres
заранее спасибо
3 ответа
Конечно, что-то вроде этого должно работать:
INSERT INTO YourTable (Question_Id, OtherField,...)
SELECT SomeNewQuestionId, OtherField,...
FROM YourTable
WHERE Question_Id = SomeQuestionId
Просто замени SomeQuestionId
а также SomeNewQuestionId
с соответствующими значениями.
Это простой запрос выбора.
insert into mytable
(field2, field3, etc)
select field2, field3, etc
from mytable
where whatever.
Это предполагает, что ни поля 2, ни 3 не являются первичными ключами, и у вас есть таблица автоинкрементов.
Перенесемся через два года....:) Я думаю, что это лучший и самый простой способ сделать это. Вставка строки данных из той же таблицы с первичным ключом приведет к ошибке, поскольку первичные ключи уникальны для каждой строки: Пусть question_id = 100.
INSERT INTO MyTable SELECT * FROM MyTable Where question_id=100;
В PostgreSQL:
ERROR: duplicate key value violates unique constraint "MyTable_pkey"
DETAIL: Key (question_id)=(100) already exists.
Очень просто избежать дублирования значения ключа:
INSERT INTO MyTable SELECT (SELECT MAX(question_id)+1),Column1,Column2,etc FROM MyTable Where question_id=100;
Используя MAX(question_id)+1, вы увеличиваете максимальное значение первичного ключа question_id MyTable, а затем добавляете / копируете данные в новую строку с уникальным значением question_id.