Задавайте вопросы, мы ответим
Вы не зашли.
очень нужна помощь! как скопировать одну колонку из одной таблицы в другую?
есть две таблички:
"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, то делать это будет до утра (очень долго, а на шаред-хостинге такого не позволят).
как без лишних проблем просто сделать копию колонки?
буду очень признателен за помощь!
Неактивен
уже пробовал раньше. вот такой запрос
INSERT INTO words (id_sort)
SELECT id_sort
FROM sorting_ids
ON DUPLICATE KEY UPDATE id_sort = sorting_ids.id_sort
но все, что это делает, так добавляет одну строку к таблице words. никаких апдейтов не делает.
Неактивен
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)
Неактивен