SQLinfo.ru - Все о MySQL

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

Задавайте вопросы, мы ответим

Вы не зашли.

#1 05.02.2014 00:03:50

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

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

Добрый день/вечер/утро всем.

Проблема следующая. Имеются две таблицы: в одной активные сделки, во второй архив.
Таблицы отличаются только одним полем - в архивной имеется 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
(к сожалению этот вариант выдает ошибку и просит проверить синтаксис sad

Спасибо.

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

Неактивен

 

#2 05.02.2014 00:09:34

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

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
Сообщений: 2422

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
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5842

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: Перенос данных из одной таблицы в другую с добавлением полей.

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

Неактивен

 

#8 05.02.2014 00:23:15

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

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

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

Неактивен

 

#9 05.02.2014 00:24:03

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

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

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


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

Неактивен

 

#10 05.02.2014 00:31:26

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

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

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

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson