Основной запрос SQL - замена данных в одном столбце таблицы на обновленные данные из другого, более раннее резервное копирование - PullRequest
2 голосов
/ 07 апреля 2011

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

Оба имеют одинаковую структуру и содержат имена пользователей и данные учетной записи. В одном столбце в table_1 - имя_экранов данные были усечены, поэтому мне нужно заменить их данными в том же столбце в table_2 , который является более старой резервной копией того же Таблица. Я собираюсь повторить для нескольких столбцов, но сначала я пытаюсь заменить усеченное имя экрана.

Полагаю, это должно быть довольно просто, но я просто не могу заставить его работать. Есть только около 4000 строк - единственное потенциальное осложнение состоит в том, что table_1 имеет больше записей, чем table_2 (это более новая версия, и с тех пор зарегистрировано больше членов), поэтому сам столбец не может быть полностью заменен более старой резервной копией.

Вот что я пробовал, но, похоже, он не работает (очевидно, получая синтаксическую ошибку):

UPDATE exp_memberscorrupt 
SET exp_memberscorrupt.screen_name = exp_membersclean.screen_name 
JOIN exp_membersclean
JOIN exp_memberscorrupt on exp_membersclean.member_id = exp_memberscorrupt.member_id

Есть идеи?

Ответы [ 3 ]

2 голосов
/ 07 апреля 2011

Если это SQL Server, синтаксис будет

UPDATE exp_memberscorrupt 
SET exp_memberscorrupt.screen_name = exp_membersclean.screen_name 
FROM exp_membersclean
JOIN exp_memberscorrupt on exp_membersclean.member_id = exp_memberscorrupt.member_id

Поскольку это MySQL, синтаксис для update-from-join: (вы перемещаете таблицы вверх после UPDATE)

UPDATE exp_membersclean
JOIN exp_memberscorrupt on exp_membersclean.member_id = exp_memberscorrupt.member_id
SET exp_memberscorrupt.screen_name = exp_membersclean.screen_name 
0 голосов
/ 07 апреля 2011

Попробуйте,

не забудьте использовать предложение WHERE и функцию mysql_error () для захвата ошибок в БД

UPDATE exp_memberscorrupt
INNER JOIN exp_membersclean
ON exp_membersclean.member_id = exp_memberscorrupt.member_id
SET exp_memberscorrupt.screen_name = exp_membersclean.screen_name
ГДЕ ...

0 голосов
/ 07 апреля 2011
update exp_memberscorrupt cor
set cor.screen_name  = cln.screen_name
from exp_membersclean cln
where cor.member_id = cln.screen_name
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...