1

Тема: UPDATE столбца

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

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

Если использовать:

UPDATE table2
SET column2=(column1)

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

А если выполнять команду:

UPDATE table2
SET column2=(base1.table1.column1)

то выдаёт:

#1054 - Unknown column 'base1.table1.column1' in 'field list'
UPDATE table2 SET column2 = ( base1.table1.column1 )

Подскажите, как правильно сформировать команду переноса колонки?

2

Re: UPDATE столбца

Обе таблицы должны содержать ключевое индексное поле по которому их можно связать. Если структуры таблиц одинаковы и обе имеют первичное ключевое поле id, то перенести данные можно так:

UPDATE `base1`.`table1` AS `b1`, `base2`.`table2` AS `b2`
SET `b2`.`column2` = `b1`.`column1`
WHERE `b1`.`id` = `b2`.`id`;

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

3 (изменено: Nikem79, 2012-03-23 10:30:51)

Re: UPDATE столбца

Я на денвере экмпериментирую, для меня пока резвервные копии не актуальны) Но спасибо, за предупреждение и за отзыв.

Пытаюсь выполнить запрос:

UPDATE `base2`.`table2`
SET `column2`=(`base1`.`table1`.`column1`)

правильно составил запрос?..

Выдаёт, что не может найти столбец...

#1054 - Unknown column 'base1.table1.column1' in 'field list'
UPDATE  `base2`.`table2` SET  `column2` = (  `base1`.`table1`.`column1` )

Структуры столбцов вроде одинаковые, или нужно чтобы индексы по уникальности были идентичны?.. Но ругается то вроде не на индексы...


а b1 и b2 это что? В вашем примере..

4

Re: UPDATE столбца

Nikem79 сказал:

UPDATE `base2`.`table2`
SET `column2`=(`base1`.`table1`.`column1`)
правильно составил запрос?

Нет, это работать не будет. Вам надо переписать мой пример со своими именами баз данных и таблиц.

base1 - первая база данных
base2 - вторая база данных
table1 - таблица из первой базы данных, что отображается как base1.table1
b1 - это алиас (короткое имя) для таблицы из первой базы данных, что аналогично base1.table1, но запись с алиасом получается короче.

Не забывайте условие объединения таблиц:
WHERE `b1`.`id` = `b2`.`id`
Здесь поле id дано для примера, в вашем случае это поле может иметь другое имя, но обязательно это должен быть первичный ключ.

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

5

Re: UPDATE столбца

Ага, с алиасами начало прояняться, по поводу ключей тоже понял вроде как, буду пробовать. Спасибо! Отпишу по результатам)

6 (изменено: Nikem79, 2012-03-24 12:08:43)

Re: UPDATE столбца

Получилось! Спасибо большое! smile

Но к сожалению в несколько приёмов. Можно ли как-то упростить эту схему?
Цель: перенести дату юникс формата, в новую базу с нормальным форматом.


## Создаём временную колонку для втягивания даты ВиртуаМарт
ALTER TABLE `prt_virtuemart_orders` ADD `data_dop` INT(11) NULL DEFAULT NULL FIRST

*******************************
## Втягиваем дату из старой базы в новую, во временную колонку.

UPDATE `partek`.`prt_vm_orders` AS `b1`, `j25`.`prt_virtuemart_orders` AS `b2` ## устанавливаем алиасы для b1 = partek.prt_vm_orders
SET `b2`.`data_dop` = `b1`.`cdate` ## Присваиваем значения для переменной b2, колонке data_dop с первой базы, колонки cdate
WHERE `b1`.`order_id` = `b2`.`virtuemart_order_id` ## Выставляем ключи таблиц из структуры по уникальности.
*******************************
## Переносим дату с конвертацией из временной колонки, в нужную колонку.
UPDATE prt_virtuemart_orders
SET created_on=FROM_UNIXTIME(data_dop)

7

Re: UPDATE столбца

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

UPDATE `partek`.`prt_vm_orders` AS `b1`, `j25`.`prt_virtuemart_orders` AS `b2`
SET `b1`.`created_on` = FROM_UNIXTIME(`b2`.`data_dop`)
WHERE `b1`.`order_id` = `b2`.`virtuemart_order_id`

8 (изменено: Nikem79, 2012-03-24 12:14:56)

Re: UPDATE столбца

Пробовал так, сейчас ещё раз попробовал точную вашу копию, выдало:

#1054 - Unknown column 'b1.created_on' in 'field list'
UPDATE  `partek`.`prt_vm_orders` AS  `b1` ,
`j25`.`prt_virtuemart_orders` AS  `b2` SET  `b1`.`created_on` = FROM_UNIXTIME(  `b2`.`data_dop` ) WHERE  `b1`.`order_id` =  `b2`.`virtuemart_order_id`


Вроде сработало, маленько перепутаны базы были.

сработало так:

UPDATE `partek`.`prt_vm_orders` AS `b1`, `j25`.`prt_virtuemart_orders` AS `b2`
SET `b2`.`created_on` = FROM_UNIXTIME(`b1`.`cdate`)
WHERE `b1`.`order_id` = `b2`.`virtuemart_order_id`



Спасибо ещё раз! Очень помог!

9

Re: UPDATE столбца

будьте любезны, помогите пожалуйста

в базе б1; таблице 1т1; имеются поля 1п1, 1п2, 1п3
каким запросом можно перенести их
в базу б2; таблицу 2т1; в поля 2п1, 2п2, 2п3

(базы находятся на одном сервере, доступ из phpmyadmin  обеим базам имеется) благодарю за помощь

10

Re: UPDATE столбца

Перенести данные можно при наличии поля первичного ключа, например id.

UPDATE `base1`.`table1` AS `t1`, `base2`.`table2` AS `t2`
SET `t2`.`field1` = `t1`.`field1`,
`t2`.`field2` = `t1`.`field2`
`t2`.`field3` = `t1`.`field3`
WHERE `t1`.`id` = `t2`.`id`

11

Re: UPDATE столбца

не получается:http://i.pixs.ru/storage/9/6/6/MySQLjpg_9534207_9142966.jpg
UPDATE  `webasyst_new`.`shop_category` AS  `b1` ,
`tuning_old`.`av_cat` AS  `b2` SET  `b2`.`ID` =  `b1`.`id` WHERE  `b1`.`id` =  `b2`.`ID`

#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'WHERE `t1`.`ID` = `t2`.`id`' at line 3

а вот базы:
база с которой перенести http://i.pixs.ru/storage/9/8/7/MySQLtunin_9960124_9142987.jpg
и база в которую перенести http://i.pixs.ru/storage/9/9/8/MySQLwebas_7929072_9142998.jpg

а вот сам запрос:
UPDATE `webasyst_new`.`shop_category` AS `t1`, `tuning_old`.`av_cat` AS `t2`
SET `t2`.`title` = `t1`.`name`,
WHERE `t1`.`ID` = `t2`.`id`

12

Re: UPDATE столбца

сделал вот таким запросом:
insert into webasyst_new.shop_category (name) select title from tuning_old.av_cat;
но считаю не правильным...

13

Re: UPDATE столбца

olgaaa сказал:

сделал вот таким запросом:
insert into webasyst_new.shop_category (name) select title from tuning_old.av_cat;
но считаю не правильным...

Это должно добавить строку.

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

14

Re: UPDATE столбца

в таблицу с одной строчкой как и нужно перенести все данный из первой базы (tuning_old)
а таблица webasyst_new в принципе пустая т.к. это новая база и её нужно наполнить старыми данными - чтобы не утратить их

15

Re: UPDATE столбца

olgaaa сказал:

в таблицу с одной строчкой как и нужно перенести все данный из первой базы (tuning_old)
а таблица webasyst_new в принципе пустая т.к. это новая база и её нужно наполнить старыми данными - чтобы не утратить их

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

16

Re: UPDATE столбца

остальные полня не нужны, или чтонибудь придумаю, главное перенести то что есть

17

Re: UPDATE столбца

olgaaa сказал:

остальные полня не нужны, или чтонибудь придумаю, главное перенести то что есть

Тогда почему не устраивает этот запрос?

insert into webasyst_new.shop_category (name) select title from tuning_old.av_cat;

18 (изменено: olgaaa, 2013-09-24 17:58:23)

Re: UPDATE столбца

1. показался не правильным этот запрос - в принципе (хотя все получилось)
2. захотелось разобраться до конца - почему не прошел запрос с update

19

Re: UPDATE столбца

UPDATE обновляет только те строки, которые объединены первичным ключом, полем id. Если строка одна, то обновлена будет только она.