Update столбца данными из таблицы другой базы - MySQL

Узнай цену своей работы

Формулировка задачи:

Здравствуйте. прошу помощи. есть две базы: db_backup_new, db_backup_old. в первой таблица (content) с поврежденными данными. во второй таблица с бекапом. надо обновить первую таблицу. SHOW CREATE TABLE content:
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'
выполняю 2 запроса:
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 )
результат: в первой таблице в столбцах (title, description) обновляются строки с id, который есть в обоих таблицах. НО все остальные строки из обновляемого столбца первой таблицы превращаются в NULL - те, 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

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

6   голосов , оценка 4 из 5
Похожие ответы