0

Вставка строки в таблицу для каждого ID из другой таблицы

11

У меня возникла проблема, с которой я не смог найти аналогичное решение на StackOverflow, и хотел бы узнать, как лучше всего решить эту задачу.

У меня есть таблица с более чем 17 миллионами строк, каждая из которых имеет уникальный идентификатор. Мы недавно создали новую таблицу, которая будет использоваться вместе с предыдущей таблицей, где внешний ключ новой таблицы — это уникальный идентификатор старой таблицы.

Пример: Таблица 1 - id, field1, field2, field3... Таблица 2 - table1.id, field1...

Проблема в том, что мы мигрируем данные в рабочую среду, и нам нужно заполнить таблицу 2 строками, содержащими id из таблицы 1 для каждой строки в таблице 1. К примеру, если в таблице 1 есть строка: 1, test, null, то в таблице 2 теперь должно быть: 1, null... и так далее для каждой строки в таблице 1. Основная проблема в том, что идентификаторы в таблице 1 не являются последовательными, поэтому нам нужно читать данные из таблицы 1 и затем вставлять информацию в таблицу 2 на основе найденного id.

Есть ли более простой способ решить эту задачу?

Также хочу уточнить, что таблица 2 будет содержать новые данные, и единственное, что она будет заимствовать из таблицы 1, — это id для поддержания связи внешнего ключа.

И еще, это SQL Server 2000.

2 ответ(ов)

0

Если я правильно вас понимаю, вы хотите, чтобы для каждой записи в table1 в table2 была создана одна запись. Я также полагаю, что кроме ссылки на table1, table2 изначально должна содержать пустые строки.

Предположим, что у вас есть следующие таблицы:

table1 (ID, field1, field2, ...)
table2 (ID, table1_ID, fieldA, fieldB, ...)
-- где table1_ID является ссылкой на поле ID в table1

После создания table2 вы можете просто выполнить следующий оператор вставки:

insert into table2(table1_ID) 
select ID from table1

Этот запрос вставит в table2 значения ID из table1, создавая таким образом по одной записи в table2 для каждой записи в table1. Не забудьте, что при этом другие поля fieldA и fieldB в table2 останутся пустыми, так как они не указаны в операторе INSERT.

0

Не совсем уверен, что я правильно вас понимаю, но подойдет ли вам что-то вроде этого?

INSERT INTO table2 (SELECT field1, field2, field3 FROM table1);

Если я правильно понял, вы хотите, чтобы в table2 был создана запись для каждой записи из table1. Этот запрос именно это и сделает. Просто сопоставьте поля в SELECT в нужном порядке и укажите константы для любых полей в table2, которые отсутствуют в table1.

Надеюсь, это поможет. Если я неправильно вас понял, дайте знать, и я постараюсь помочь ещё раз.

Чтобы ответить на вопрос, пожалуйста, войдите или зарегистрируйтесь