SQLinfo.ru - Все о MySQL

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

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

Вы не зашли.

#1 09.12.2011 23:55:16

kovpack
Участник
Зарегистрирован: 09.12.2011
Сообщений: 2

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

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

есть две таблички:

"words" с такими колонками: 1) id с autoincrement, 2) sort_id, 3) и другие колонки

"sorting_ids" с такими колонками: 1) id_sort с autoincrement, 2) просто поле id (без autoincrement), 3) и другие колонки

мне нужно полностью скопировать колонку id_sort с таблицы sorting_ids и заменить ею колонку id_sort в таблице words. по-идее, это можно было сделать так:

INSERT INTO words (id_sort)
SELECT id_sort
FROM sorting_ids;

НО: мне возвращается ошибка "Duplicate entry'' for key 1".

работает вот такой запрос: UPDATE words SET words.id_sort = (SELECT sorting_ids.id_sort FROM sorting_ids WHERE sorting_ids.id = words.id). но если строк 100000, то делать это будет до утра (очень долго, а на шаред-хостинге такого не позволят).

как без лишних проблем просто сделать копию колонки?

буду очень признателен за помощь!

Неактивен

 

#2 10.12.2011 00:59:52

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

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

Посмотрите в эту сторону.


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

Неактивен

 

#3 10.12.2011 14:32:11

kovpack
Участник
Зарегистрирован: 09.12.2011
Сообщений: 2

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

уже пробовал раньше. вот такой запрос

INSERT INTO words (id_sort)
SELECT id_sort
FROM sorting_ids
ON DUPLICATE KEY UPDATE id_sort = sorting_ids.id_sort


но все, что это делает, так добавляет одну строку к таблице words. никаких апдейтов не делает.

Неактивен

 

#4 10.12.2011 22:40:37

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

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

kovpack написал:

работает вот такой запрос: UPDATE words SET words.id_sort = (SELECT sorting_ids.id_sort FROM sorting_ids WHERE sorting_ids.id = words.id). но если строк 100000, то делать это будет до утра (очень долго, а на шаред-хостинге такого не позволят).

Этот запрос можно уcкорить, если добавить ключ на поле sorting_ids.id или составной ключ (sorting_ids.id,sorting_ids.id_sort).

Ну и можно читерски: разбить его на части по какому-то критерию - например по дополнительному полю в таблице words.

Цикл по возможным значениям дополнительного поля в таблице words

UPDATE words SET words.id_sort = (SELECT sorting_ids.id_sort FROM sorting_ids WHERE sorting_ids.id = words.id) WHERE words.КАКОЕ_ТО_ДРУГОЕ_ПОЛЕ=ОЧЕРЕДНОЕ_ВОЗМОЖНОЕ_ЗНАЧЕНИЕ)

конец цикла.

Отредактированно deadka (10.12.2011 22:41:34)


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

Неактивен

 

Board footer

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