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

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

  • автор:

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-менеджера. На этом все, до новых встреч!

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

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

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

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

INSERT INTO `table_a` (`name`, `alt`, `page`) SELECT `name`, `alt`, `page` FROM `table_b` WHERE `id` = 1

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

INSERT INTO `table_a` (`name`, `alt`, `page`) SELECT `name`, `alt`, `page` FROM `table_b` WHERE `id` IN(1,2,3)

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

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

INSERT INTO `table_b` SELECT * FROM `table_a`

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

INSERT INTO `table_a` (`name`, `alt`, `page`) SELECT `name`, `alt`, `page` FROM `table_b` 

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

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

INSERT INTO `table_b` (`name`, `alt`, `page`, `module`, `sort`) SELECT `filename` AS `name`, '' AS `alt`, `page`, 'prod' AS `module`, 1 AS `sort` FROM `table_a`

Копирование с подзапросом в третью таблицу

INSERT INTO `table_b` (`name`, `alt`, `page`, `module`, `sort`) SELECT (SELECT `name` FROM `table_c` WHERE `item_id` = `table_a`.`id`) AS `name`, '' AS `alt`, `page`, 'prod' AS `module`, 1 AS `sort` FROM `table_a`

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

INSERT INTO `table_b` (`name`, `email`, `address`) SELECT * FROM ( (SELECT `name`, `email`, `address` FROM `table_a`) UNION ( SELECT `name`, `email`, `address` FROM `table_c`) )

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

Добрый вечер, хочу перенести данные из одной таблицы в другую, но проблема в том, что в той таблице, в которую хочу перенести данные количество столбцов больше как можно это обойти ?

INSERT INTO orders SELECT * FROM basket

  • Вопрос задан более трёх лет назад
  • 2372 просмотра

Комментировать
Решения вопроса 1
alexalexes @alexalexes

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

insert into orders (column_1, column_2, column_3) select column_1, column_2, 'default_value' fake_column from basket

PS: fake_column может быть не только задано статичным значением из текста запроса, но и вычислено подзапросом (и даже хранимой или какой-нибудь функцией), возвращающим скалярное значение:

insert into orders (column_1, column_2, column_3) select column_1, column_2, (select count(*) from basket) fake_column from basket

Форум пользователей MySQL

Проблема следующая. Имеются две таблицы: в одной активные сделки, во второй архив.
Таблицы отличаются только одним полем — в архивной имеется id архивной записи.
Как можно перенести все записи из 1-й таблицы во вторую?

Набор полей table_arch
id_arch, id_act, pole1, pole2

Набор полей table_act
id_act, pole1, pole2

Уже работает следующая команда:
INSERT INTO table_arch select », pole1, pole2 from table_act

Но т.к. в реальности количество полей гораздо больше — вопрос: существует ли более короткое/красивое решение типа:

INSERT INTO table_arch select », * from table_act
(к сожалению этот вариант выдает ошибку и просит проверить синтаксис

Отредактированно TheVeter (05.02.2014 00:05:28)

#2 05.02.2014 00:09:34

vasya Архат Откуда: Орел Зарегистрирован: 07.03.2007 Сообщений: 5823

Re: Перенос данных из одной таблицы в другую с добавлением полей.

INSERT INTO table_arch (id_act, pole1, pole2) select * from table_act

Или указать только нужные поля, если вам нужно переносить не все данные
INSERT INTO table_arch (pole1, pole2) select pole1, pole2 from table_act

#3 05.02.2014 00:09:56

deadka Администратор Зарегистрирован: 14.11.2007 Сообщений: 2417

Re: Перенос данных из одной таблицы в другую с добавлением полей.

INSERT INTO table_arch ( id_act, pole1, pole2 ) select id_act, pole1, pole2 from table_act;

По идее должно отработать если поле id_arch может принимать значение NULL или имеет значение по умолчанию.

Если не получится, то приведите сюда результаты
show create table table_arch;
и
show create table table_act;

Зеленый свет для слабаков, долги отдают только трусы, тру гики работают только в консоли.

#4 05.02.2014 00:16:06

TheVeter Участник Зарегистрирован: 04.02.2014 Сообщений: 6

Re: Перенос данных из одной таблицы в другую с добавлением полей.

Спасибо за оперативный ответ, но все предложенные варианты требует перечисления всех полей, которые нужно вставить. От чего я и пытался избавиться. Да, они работают.
Но мне интересно, можно ли уйти от перечисления всего, что нужно. В реальности в таблицах по 20-30 полей (есть шанс ошибки + обычная лень). Отличие — только на одно поле (id архивной записи). Плюс база в процессе разработки, и набор полей может измениться (одновременно в двух таблицах). Не хотелось бы при изменениях править еще и код этого запроса.

Отредактированно TheVeter (05.02.2014 00:16:56)

#5 05.02.2014 00:18:09

vasya Архат Откуда: Орел Зарегистрирован: 07.03.2007 Сообщений: 5823

Re: Перенос данных из одной таблицы в другую с добавлением полей.

TheVeter написал:

Но мне интересно, можно ли уйти от перечисления всего, что нужно.

#6 05.02.2014 00:21:10

TheVeter Участник Зарегистрирован: 04.02.2014 Сообщений: 6

Re: Перенос данных из одной таблицы в другую с добавлением полей.

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

#7 05.02.2014 00:21:57

TheVeter Участник Зарегистрирован: 04.02.2014 Сообщений: 6

Re: Перенос данных из одной таблицы в другую с добавлением полей.

жалко, что нельзя. Спасибо.

#8 05.02.2014 00:23:15

vasya Архат Откуда: Орел Зарегистрирован: 07.03.2007 Сообщений: 5823

Re: Перенос данных из одной таблицы в другую с добавлением полей.

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

#9 05.02.2014 00:24:03

deadka Администратор Зарегистрирован: 14.11.2007 Сообщений: 2417

Re: Перенос данных из одной таблицы в другую с добавлением полей.

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

Зеленый свет для слабаков, долги отдают только трусы, тру гики работают только в консоли.

#10 05.02.2014 00:31:26

vasya Архат Откуда: Орел Зарегистрирован: 07.03.2007 Сообщений: 5823

Re: Перенос данных из одной таблицы в другую с добавлением полей.

Кстати, да, deadka прав.
Посмотрите http://webew.ru/articles/200.webew

#11 05.02.2014 00:31:50

TheVeter Участник Зарегистрирован: 04.02.2014 Сообщений: 6

Re: Перенос данных из одной таблицы в другую с добавлением полей.

deadka написал:

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

Спасибо за этот вариант. Буду копать в этом направлении. Т.к. пока у меня 2-3 таблицы с записями, которые нужно архивировать — я еще могу клепать и переклепывать запросы руками. Но если в этом направлении наметится рост — без автоматизации будет очень много ручной работы.

#12 05.02.2014 00:36:45

TheVeter Участник Зарегистрирован: 04.02.2014 Сообщений: 6

Re: Перенос данных из одной таблицы в другую с добавлением полей.

vasya написал:

Кстати, да, deadka прав.
Посмотрите http://webew.ru/articles/200.webew

Спасибо за статью, кажется то, что нужно.
Завтра на свежую голову все переварю.

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

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