Update столбца данными из таблицы другой базы - MySQL
Формулировка задачи:
Здравствуйте.
прошу помощи.
есть две базы: db_backup_new, db_backup_old. в первой таблица (content) с поврежденными данными. во второй таблица с бекапом.
надо обновить первую таблицу.
SHOW CREATE TABLE content:
выполняю 2 запроса:
результат:
в первой таблице в столбцах (title, description) обновляются строки с id, который есть в обоих таблицах. НО все остальные строки из обновляемого столбца первой таблицы превращаются в NULL - те, id которых отсутствуют во второй и которые не должны быть изменены.
на примере выглядит так:
вопросы:
почему оно трогает записи, которых нет во второй таблице?
как получить требуемый результат?
CREATE TABLE `content` ( `id` INT(6) NOT NULL AUTO_INCREMENT, `title` mediumtext CHARACTER SET cp1251 NOT NULL, `title_en` mediumtext CHARACTER SET cp1251, `description` mediumtext CHARACTER SET cp1251, `text` longtext CHARACTER SET cp1251, `text_en` longtext CHARACTER SET cp1251, `def_image` VARCHAR(50) CHARACTER SET cp1251 DEFAULT NULL, `posted_date` DATE NOT NULL DEFAULT '0000-00-00', `param` VARCHAR(100) CHARACTER SET cp1251 NOT NULL, `part` VARCHAR(50) CHARACTER SET cp1251 NOT NULL DEFAULT '/', PRIMARY KEY (`id`), KEY `param` (`param`) ) ENGINE=MyISAM AUTO_INCREMENT=6052 DEFAULT CHARSET=cp1251 COLLATE=cp1251_ukrainian_ci COMMENT='Site Content'
UPDATE db_backup_new.content AS NEW SET NEW.title = (SELECT OLD.title FROM db_backup_old.content AS OLD WHERE NEW.id = OLD.id ) UPDATE db_backup_new.content AS NEW SET NEW.description = (SELECT OLD.description FROM db_backup_old.content AS OLD WHERE NEW.id = OLD.id )
первая таблица |
1 - текст |
2 - текст |
3 - текст |
4 - текст |
5 - текст |
вторая таблица |
1 - бекаптекст |
2 - бекаптекст |
3 - бекаптекст |
результат обновления в первой |
1 - бекаптекст |
2 - бекаптекст |
3 - бекаптекст |
4 - NULL |
5 - NULL |
требуемый результат |
1 - бекаптекст |
2 - бекаптекст |
3 - бекаптекст |
4 - текст |
5 - текст |
Решение задачи: «Update столбца данными из таблицы другой базы»
textual
Листинг программы
UPDATE db_backup_new.content AS NEW, db_backup_old.content AS OLD SET NEW.title = OLD.title, NEW.description = OLD.description WHERE NEW.id = OLD.id
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д