Как добавить записи из одной таблицы в другую sql
Перейти к содержимому

Как добавить записи из одной таблицы в другую sql

  • автор:

Инструкция INSERT INTO (Microsoft Access SQL)

Эта инструкция добавляет одну или несколько записей в таблицу Это называется запросом на добавление.

Синтаксис

Запрос на добавление нескольких записей

INSERT INTO целевой объект [(field1[, field2[, . ]])] [IN externaldatabase] SELECT [источник.] field1[, field2[, . ] Выражение from tableexpression

Запрос на добавление одной записи

INSERT INTO целевой объект [(field1[, field2[, . ]])] VALUES (value1[, value2[, . ])

Инструкция INSERT INTO состоит из следующих элементов:

Имя таблицы или запроса, куда добавляются записи.

После аргумента конечный_объект — имена полей, в которые добавляются данные; после аргумента источник — имена полей, из которых извлекаются данные.

Путь к внешней базе данных. Описание пути см. в статье, посвященной предложению IN.

Имя таблицы или запроса, откуда копируются записи.

Одно или несколько имен таблиц, из которых требуется получить записи. Этот аргумент может представлять собой имя отдельной таблицы, результирующее выражение, составленное с использованием операций INNER JOIN, LEFT JOIN или RIGHT JOIN, или сохраненный запрос.

Значения, которые будут добавлены в определенные поля новой записи. Каждое значение вставляется в поле, соответствующее его положению в списке: значение1 добавляется в поле1 новой записи, значение2 — в поле2 и т. д. Необходимо разделять значения запятой и заключать текстовые поля в кавычки (‘ ‘).

Примечания

С помощью инструкции INSERT INTO можно добавить в таблицу одну запись, используя указанный выше синтаксис. В этом случае указываются имена и значения для каждого поля записи. Необходимо указать все поля записи, которым присваиваются значения, и соответствующие значения. Если не указать значение поля, ему будет присвоено значение по умолчанию или Null. Записи добавляются в конец таблицы.

С помощью инструкции INSERT INTO также можно добавить набор записей из другой таблицы или запроса, используя предложение SELECT. FROM, как показано выше (см. синтаксис запроса на добавление нескольких записей). В этом случае предложение SELECT задает поля для добавления в указанный конечный_объект.

Источник или конечный_объект может быть таблицей или запросом. Если задан запрос, ядро СУБД Microsoft Access добавляет записи ко всем таблицам, которые возвращает этот запрос.

Использование инструкции INSERT INTO не является обязательным. Если она указана, она должна предшествовать инструкции SELECT.

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

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

Добавить записи в таблицу другой базы данных можно с помощью предложения IN.

Чтобы создать таблицу, используйте инструкцию SELECT. INTO для получения запроса на создание таблицы.

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

Запрос на добавление копирует записи из одной или нескольких таблиц в другую таблицу. При этом таблицы, содержащие добавляемые записи, остаются без изменений.

Вместо добавления записей из другой таблицы можно задать значение каждого поля в отдельной новой записи с помощью предложения VALUES. Если список полей опущен, в предложение VALUES необходимо включить соответствующие значения каждого поля таблицы; в противном случае операция INSERT не будет выполнена. Воспользуйтесь инструкцией INSERT INTO вместе с предложением VALUES для каждой дополнительной записи, которую требуется создать.

Ссылки, предоставляемые сообществом UtterAccess. UtterAccess — это премиальный вики-портал и форум, посвященный Microsoft Access.

  • Создание последовательных чисел для инструкций INSERT/UPDATE
  • Форматирования SQL в VBA

Пример

В этом примере выбираются все записи из гипотетический таблицы New Customers, а затем они добавляются в таблицу Customers. Если отдельные столбцы не указаны, имена столбцов таблицы в инструкции SELECT должны в точности совпадать с именами столбцов таблицы в инструкции INSERT INTO.

 Sub InsertIntoX1() Dim dbs As Database ' Modify this line to include the path to Northwind ' on your computer. Set dbs = OpenDatabase("Northwind.mdb") ' Select all records in the New Customers table ' and add them to the Customers table. dbs.Execute " INSERT INTO Customers " _ & "SELECT * " _ & "FROM [New Customers];" dbs.Close End Sub 

В этом примере создается новая запись в таблице Employees.

 Sub InsertIntoX2() Dim dbs As Database ' Modify this line to include the path to Northwind ' on your computer. Set dbs = OpenDatabase("Northwind.mdb") ' Create a new record in the Employees table. The ' first name is Harry, the last name is Washington, ' and the job title is Trainee. dbs.Execute " INSERT INTO Employees " _ & "(FirstName,LastName, Title) VALUES " _ & "('Harry', 'Washington', 'Trainee');" dbs.Close End Sub 

Как добавить записи из одной таблицы в другую из разных БД?

Есть два одинаковых сайта, один из них тестовый, для экспериментов. Клиент случайно добавил новые товары в базу на тестовый сайт. Хочу вытащить эти записи из БД, никогда этого не делала, почитала курс по SQL, план такой: 1. Вытащить эти записи запросом из таблицы с продуктами и создать из них новую таблицу:

SELECT * INTO 'test_products' FROM `nkvzs_jshopping_products` WHERE `date_modify`> '2017-09-17 00:00:00.000'; 
  1. Экспортировать новую таблицу из базы и импортировать её в базу основного сайта.
  2. Слить две таблицы вместе командой SELECT * FROM frdsy_jshopping_products UNION SELECT * FROM test_products ;

Но новая таблица не создаётся автоматически, phpmyadmin ругается, что она не существует. Вручную создавать не хочется. Это вообще правильный ход мыслей? Как правильно действовать?

Отслеживать
задан 20 сен 2017 в 12:33
Лера Клаус Лера Клаус
1 1 1 серебряный знак 2 2 бронзовых знака

2 ответа 2

Сортировка: Сброс на вариант по умолчанию

новая таблица не создаётся автоматически

И не должна. Создайте её явно запросом

CREATE TABLE test_products LIKE nkvzs_jshopping_products; 

А потом уже вставляйте в неё нужные записи.

Слить две таблицы вместе командой

Запрос SELECT ничего не «сливает». Ну то есть одним списком Вы записи, конечно, увидите, но от этого они в одну таблицу не сольются, вывод записей совсем даже не хранение.

Это вообще правильный ход мыслей?

Скажем так — один из многочисленных сравнительно правильных, ну или похожих на правильный. Не зная схемы БД, сказать, совсем он правильный, частично, или к правильному и близко не лежал, увы, невозможно.

Отслеживать
ответ дан 20 сен 2017 в 13:31
32k 3 3 золотых знака 21 21 серебряный знак 40 40 бронзовых знаков

Спасибо, полезно. Результат работы команды UNION просто список? А как этот результат сохранить в таблицу? Через UPDATE или INSERT можно?

20 сен 2017 в 15:06

Ну либо INSERT INTO . (SELECT . UNION SELECT . ) , либо UPDATE . , (SELECT . UNION SELECT . ) AS . SET . .

20 сен 2017 в 18:11

Большое спасибо, я поняла. А как избежать ошибки дублирования по первичному ключу? UPDATE заменит записи, а INSERT ругается на дубли по id_product.

21 сен 2017 в 16:54

как избежать ошибки дублирования по первичному ключу? Раз [phpmyadmin], то, вероятно, [mysql]. Тогда INSERT .. ON DUPLICATE KEY UPDATE либо REPLACE. А дубли в таблицах-источниках сами отсеются, ибо UNION DISTINCT.

21 сен 2017 в 19:05
Большое спасибо!
22 сен 2017 в 10:28

Если формат баз данных у обоих сайтов одинаковый, и при этом товары не имеют внешних связей по каким-либо полям, то возможно можно поступить проще:

  1. Важно. Сделать бекапы обоих сайтов и их баз
  2. Выделить товары для переноса в том же PHPMyAdmin (вручную или выбрать через SELECT и выделить все выбранные)
  3. Нажать «Экспорт» на панельке внизу таблицы. Выбранные записи преобразуются в текст SQL запроса, в итоге после шаманств с настройками можно получить просто набор INSERT для этой же базы данных
  4. Взять получившийся текст SQL и выполнить его на боевой базе данных
  5. При ругани на PRIMARY KEY из запросов INSERT удалить значения PRIMARY KEY из обоих частей INSERT — ну то есть предоставить БД самой ставить значение PRIMARY KEY
  6. В случае ошибки или отличия результата от желаемого вернуться к пункту 1, восстановив данные из сделанных бекапов. Обдумать ошибки и повторить

Если же к товарам привязаны файлы, изображения, какие-то связи и так далее — то просто смешать или добавить в чистом SQL не получится. Нужно персонально подходить к задаче, выяснять логику каждого поля и грамотно их перенести. Лучше скриптом, подключенным сразу к двум БД. Берем из первой, анализируем, аккуратно вставляем во вторую

UPD: В случае, если у записей есть связи, нужно вынимать запись целиком, вместе со всеми связями

Это значит, что если к примеру у записи А есть еще три связанных записи AB, AC, AD в других таблицах (изображения, документы, права, статистика просмотров, что-то еще), то проще сделать скрипт с примерно следующим алгоритмом:

  1. Подключиться к тестовой БД
  2. Вынуть интересующие нас записи
  3. Вынуть все связанные с ними записи
  4. Отключиться от тестовой БД, подключиться к боевой БД
  5. Добавить все связанные материалы в соответствующие таблицы (AB, AC, AD из примера выше). Получить новое значение поля, по которому строится связь
  6. В основной записи A поменять все поля, отвечающие за связи, на новые значения из связанных AB, AC, AD
  7. Добавить основную запись с обновленными значениями связей

Это сложные операции, на чистом SQL делать их довольно трудно. Проще написать скрипт, которому дается идентификатор записи в тестовой БД, которую нужно перенести в боевую. И переносить их скриптом, аккуратно

Как добавить записи из одной таблицы в другую sql

Копирование записей из одной таблицы в другую MySQL

Примеры SQL-запросов для копирования записей из разных таблицы.

Частичное копирование

К примеру есть две одинаковые по структуре, нужно из таблицы `table_a` скопировать запись с определенными полями в таблицу `table_b`.

Копирование нескольких записей:

Полное копирование

Если таблицы `table_a` и `table_b` полностью одинаковые по структуре, то названия полей можно опустить.

Или указать только нужные поля:

Подгонка структуры таблицы

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

MySQL — как вставить данные из одной таблицы в другую?

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

Итак, чтобы полностью скопировать данные из одной таблицы в другую достаточно такого запроса:

INSERT INTO table_to
SELECT * FROM table_from

Вместо table_to и table_from подставляете названия своих таблиц и все получится.

Скопировать только некоторые столбцы из одной таблицы в другую можно таким запросом:

INSERT INTO table_to (`col1`, `col2`, `col2`)
SELECT `a1`, `a2`, `a3` FROM table_from

И последний вариант, копирование данных из таблицы в таблицу по какому-либо условию:

INSERT INTO table_to (`col1`, `col2`, `col2`)
SELECT `a1`, `a2`, `a3` FROM table_from WHERE `a1` > 100;

Выполнить данные запросы можно с помощью phpAdmin или любого другого mysql-менеджера. На этом все, до новых встреч!

Insert в MySQL — добавление данных в таблицу

В статье расскажем, для чего нужна команда INSERT в MySQL и покажем как ей пользоваться на десяти практических примерах.

Зачем нужна команда Insert

Команда INSERT используется для того, чтобы вставлять новые данные в таблицы. Общий и наиболее часто используемый синтаксис выглядит так:

Минимальный набор обязательных параметров: название таблицы и список значений. Но часто также указывают список столбцов, в которые нужно вставить данные. Есть еще много других необязательных параметров и возможностей. Самую основную часть из них мы посмотрим в этой статье.

Создаем базу MySQL в облаке

Прежде чем начать работать с командой Insert, нам нужна база данных MySQL. Чтобы не заниматься долгой установкой и настройкой, мы создадим управляемую БД на платформе Selectel. Если сервер MySQL у вас уже установлен, можете сразу переходить к следующему разделу.

Заходим в личный кабинет, в разделе «Облачная платформа» переходим к «Базам данных». Нажимаем кнопку «Создать кластер».

Создание базы данных в панели Selectel

На следующем экране выбираем параметры новой базы. Выбираем «СУБД» — MySQL. Далее необходимо выбрать конфигурацию сервера: нам будет достаточно 2 vCPU, 4 ГБ оперативной памяти и 32 ГБ диска. Обратите внимание на раздел «Сеть» — у вас должна быть выбрана публичная сеть, чтобы к базе данных можно было подключиться из интернета. Остальные параметры можно оставить по умолчанию.

Конфигурация для нового кластера БД

Немного подождем, пока сервер создается. Когда он перейдет в статус ACTIVE, выберите его и зайдите в раздел настроек. Сначала перейдем на вкладку «Пользователи» и создадим нового пользователя, который сможет подключаться к базе данных. Не забудьте записать имя пользователя и пароль, они будут нужны для подключения.

Создание пользователя

Затем перейдем на следующую вкладку — «Базы данных». Нам нужно создать базу, в которой мы будем работать. Для этого нажмем кнопку «Создать базу данных». Запишите название созданной БД, оно нам будет нужно для подключения.

Создание базы данных MySQL

Когда база создастся, нужно дать нашему пользователю права на нее. На этой же вкладке нажмем кнопку «Добавить» и выберем недавно созданного пользователя.

Добавление доступа к базе

Все, БД настроена и к ней можно подключаться. Чтобы узнать параметры подключения, перейдите на вкладку «Настройки» и там в самом низу в разделе «Подключение» указаны нужные параметры. Вы можете пользоваться консольным клиентом или любой графической утилитой. Мы будем показывать на примере консольного клиента, поэтому строка для подключения будет выглядеть вот так:

После ввода этой команды консоль попросит нас ввести пароль. Вот и все, мы подключились к БД.

Структура таблиц для примеров

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

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

  • stores, таблица магазинов:
  • fruits, таблица фруктов:
  • sale, таблица наличия товаров и цены:

Пример 1: базовое использование команды INSERT

Начнем с самого простого использования команды INSERT в MySQL. Добавим новый фрукт в справочник фруктов. Команда будет выглядеть так:

Проверяем таблицу фруктов и видим, что появилась новая запись:

Мы не указывали названия столбцов, в которые хотим вставить данные. Поэтому они вставлялись по порядку, как они расположены в таблице. Поэтому нам нужно было указывать значения для всех столбцов, которые есть в таблице, даже если мы не хотим их заполнять.

Но если в таблице много столбцов, нам может быть неудобно указывать много пустых значений. Поэтому существует другой способ записи, в котором нужно явно указывать названия столбцов.

Обратите внимание, что в таблице stores у нас еще есть столбец с адресом, но мы его не указали. Посмотрим, что вставилось в таблицу:

Мы видим указанные нами значения, а в поле address вставилось значение NULL.

Пример 2: вставка нескольких строк

За один запрос можно добавлять сразу несколько элементов. Например, мы хотим добавить три новых фрукта. Вместо того, чтобы писать три отдельных команды INSERT, мы воспользуемся вот таким способом записи:

Посмотрим результат. Видим, что появилось сразу три новых записи:

Пример 3: использование SET

В команде INSERT мы обычно указываем отдельно столбцы и отдельно значения. Но есть способ записи, похожий на команду UPDATE: указывать столбцы и их значения через символ равенства. Такой способ может быть удобен, когда в таблице много полей и значений. Так сразу видно, в какое поле какое значение подставляется.

Проверим, что числа вставились именно в те столбцы, которые мы указали:

Пример 4: вставка с выражением

Во всех предыдущих примерах мы указывали явное значение для столбца. Но в MySQL можно использовать арифметические выражения, например сумму, разность, умножение и так далее. Допустим, мы хотим добавить запись в таблицу sale о том что в магазине № 2 продаются апельсины по 137 рублей. Но потом мы решаем, что хотим сделать скидку 6%. Чтобы не высчитывать ее самим, мы можем использовать такой запрос:

Мы умножаем 137 рублей на 0.94, это и есть скидка 6%. Проверим что у нас получилось:

Пример 5: вставка данных из другой таблицы

В качестве источника данных для вставки можно использовать другую таблицу. Предположим, у нас есть таблица fruits_new, где хранится список фруктов, которые мы заказали у поставщиков, но эти фрукты еще не продаются в наших магазинах. И вот наконец-то нам привезли два новых фрукта, которые мы так давно ждали. Но вместо того, чтобы переписывать эти названия в команду INSERT, мы можем просто использовать таблицу fruits_new и загружать данные из нее. Для этого нам понадобится оператор SELECT:

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

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

Пример 6: вставка значения по умолчанию

Обычно, если в MySQL для столбца не указано значение, то команда INSERT INTO подставляет NULL. Но если при создании таблицы у этого столбца было указано значение по умолчанию (default), тогда подставится именно оно. В нашей таблице sale у столбца count значение по-умолчанию равно единице. Проверим это, вставив новую запись без указания этого столбца:

Проверяем результат. Мы не указывали значение для столбца count, но автоматически подставлилось значение 1.

Пример 7: вставка или обновление при дубликате

В MySQL нельзя добавить строку в таблицу, у которой дублируется первичный ключ (primary key). В наших таблицах stores и fruits поле id — это первичный ключ. Поэтому если мы попробуем добавить в таблицу fruit значение с то MySQL выдаст ошибку.

Но существует похожая на INSERT команда — REPLACE, которая умеет перезаписывать значения. Она работает как INSERT и UPDATE одновременно: если в таблице еще нет записи с таким первичным ключом, команда создаст новую запись; а если уже есть — заменит ее.

Проверяем результат и видим, что вместо яблока у нас появился лимон с тем же идентификатором.

Пример 8: игнорирование ошибки при вставке

Продолжим предыдущий пример. Допустим, записи в нашу таблицу вставляет бэкенд-сервис приложения. Мы хотим, чтобы сервис попробовал вставить новую запись, но если такой первичный ключ уже существует — ничего не обновлял и просто шел выполнять другой код. Но при совпадении ключей MySQL выдаст ошибку, а код на бэкенде прервется и ее нужно будет обрабатывать в сервисе. Гораздо проще добавить к команде INSERT ключевое слово IGNORE, чтобы при совпадении первичного ключа MySQL не генерировал ошибку:

Обратите внимание на сообщение, которое выдает MySQL, оно будет примерно таким: Query OK, 0 rows affected, 1 warning. Это значит, что запрос выполнился успешно, при этом он не затронул ни одну строки и есть одно предупреждение. Проверим результат: видим, что новых магазинов не появилось, а текущие не изменились.

Пример 9: вставка записи в определенные партиции

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

  • p0 для записей, у которых count от 0 до 100
  • p1 для записей, у которых count от 101 до 150.

Чтобы вставить данные в первую партицию, воспользуемся командой:

Кроме того, в одной команде мы можем вставлять данные сразу в несколько партиций. Это делается так:

Пример 10: изменение приоритета

В некоторых движках таблиц MySQL (например, в MyISAM, MEMORY и MERGE) можно изменить приоритет вставки данных. Например, можно сделать так, что если таблицу считывает команда SELECT, то команда INSERT будет ждать ее завершения. Это делается с помощью ключевого слова LOW_PRIORITY:

Если же нужно наоборот поднять приоритет, используется такая команда:

Но нужно иметь ввиду, что если к таблице активно идут SELECT-запросы, то команда INSERT с низким приоритетом может ждать своей очереди довольно долго.

Заключение

Мы рассмотрели команду INSERT и познакомились с десятью самыми основными способами ее использования. Вы узнали, как с помощью SQL команды можно добавить новую строку в таблицу или обновить существующую. Зная эти основы, вы можете начать писать INSERT-запросы для своей структуры БД.

mySQL :: insert into table, data from another table?

I was wondering if there is a way to do this purely in sql:

Note: q1 would return about 30k rows.

Is there any way to do what I am attempting above in straight sql? To just pull the data straight from one table (basically a raw data table) and insert into another table (basically a processed data table)?

7 Answers 7

for selected column

Answered by zerkms is the correct method. But, if someone looking to insert more extra column in the table then you can get it from the following:

In the above query, there are 2 extra columns named email & current_time.

Analysis

We can use above query if we want to copy data from one table to another table in mysql

  1. Here source and destination table are same, we can use different tables also.
  2. Few columns we are not copying like style_id and is_deleted so we selected them hard coded from another table
  3. Table we used in source also contains auto increment field so we left that column and it get inserted automatically with execution of query.

Execution results

1 queries executed, 1 success, 0 errors, 0 warnings

Query: insert into preliminary_image (style_id,pre_image_status,file_extension,reviewer_id,uploader_id,is_deleted,last_updated) select .

Похожие публикации:

  1. Asc в sql что это
  2. Error 26 sql server как исправить
  3. Logical reads ms sql что это
  4. Microsoft sql server как удалить

Копирование записей из одной таблицы

Как сделать копирование записей из одной таблицы в другую, и потом обновить одно поле с данными из другой таблицы средствами sql запросов? Есть три таблицы:

CREATE TABLE [vedomost] ( [id] INTEGER PRIMARY KEY, [fio] VARCHAR(80), [dolgnost] VARCHAR(80), [stavky] FLOAT, [work_days] INTEGER, [shtraf] FLOAT, [nalog] FLOAT, [prochee] FLOAT, [avans] FLOAT, [premija] FLOAT, [month] VARCHAR(30), [year] INTEGER, [point] VARCHAR(80), [n_month] INTEGER, [status] BOOLEAN); CREATE TABLE [dolgnosty] ( [id] INTEGER PRIMARY KEY, [dolgnost] VARCHAR(80)); CREATE TABLE [stavky] ( [id] INTEGER PRIMARY KEY, [dolgnost] VARCHAR(80), [stavka] FLOAT, [year] VARCHAR(30), [month] VARCHAR(30), [point] VARCHAR(80), [n_month] INTEGER); 

Вопрос в следующем. Надо скопировать из таблицы dolgnosty все значения поля [dolgnost] в таблицу stavky, а потом в таблице stavky вставить значения в поле [stavka] из таблицы vedomost, из поля [stavky].

Отслеживать

51.4k 88 88 золотых знаков 269 269 серебряных знаков 508 508 бронзовых знаков

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *