Вставить строку в таблицу для каждого идентификатора в другой таблице

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

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

Например,
Таблица 1 - id, field1, field2, field3 ... таблица 2 - table1.id, field1 ...

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

Есть ли более простой способ сделать это? заранее спасибо Джо

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

Также это sql server 2000

ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
47
0
74 100
4
Перейти к ответу Данный вопрос помечен как решенный

Ответы 4

Я не уверен, что точно слежу за вами, но сработает ли что-то подобное для вас?

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

Если я правильно понимаю, вам нужна запись в таблице2 для каждой записи в таблице1. Так и будет. Просто сопоставьте свои поля в выбранном в правильном порядке и укажите константы для любых полей в таблице 2, которых у вас нет в таблице 1.

HTH. Дайте мне знать, если я не понимаю, и я снова попытаюсь помочь.

Работает ли этот синтаксис на сервере SQL? При попытке я получаю сообщение об ошибке "Ошибка рядом с SELECT"

Trevor 29.07.2013 18:19

да, это должно работать и для sql server. Создайте вопрос с вашим синтаксисом, который выдает ошибку, и отправьте ссылку, если хотите.

Ryan Guill 02.08.2013 16:33

Чтобы заставить его работать в SQL Server, мне пришлось написать: INSERT INTO table2 (field1, field2, field3) SELECT field1, field2, field3 FROM table1

ConnorsFan 10.06.2014 22:45

С таким количеством строк вы можете столкнуться с проблемами, связанными с пространством журнала транзакций и длительностью выполнения больших транзакций вставки.

Если время выполнения является ограничением, я бы серьезно рекомендовал использовать Bcp (или любой другой инструмент, применимый в зависимости от платформы)

Выберите идентификаторы из исходной таблицы, используйте их для создания файла Bcp для таблицы расширений, затем Bcp его.

Многие находят Bcp более производительным в файлах из 10 000 записей вместо одного файла humungus с 17 000 000 строк.

Кроме того, вы можете сделать это в фоновом режиме перед запуском и написать задание t-sql, которое можно было бы поднять, и которое, возможно, было вставлено после того, как вы взяли оснастку идентификаторов.

Ответ принят как подходящий

Вам необходимо прочитать эту статью.

Каковы наиболее распространенные антипаттерны SQL?

The main issue is that the ids are not all sequential in table 1 so we will have to read from table 1 and then insert based of the id of found into table 2

Да, посмотрите мой ответ в статье выше и напишите цикл перебора ключей, используя пункт 2.

Убедитесь, что, когда вы пишете оператор вставки, вы предоставляете список полей - как я сказал в пункте №1.

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

Предполагая, что

table1 (ID, field1, field2, ...)
table2 (ID, table1_ID, fieldA, fieldB,...)
-- where table1_ID is a reference to ID of table1

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

insert into table2(table1_ID) 
select ID from table1

Другие вопросы по теме