UPDATE одного поля по полю из другой таблицы

  • Автор темы Автор темы usascha
  • Дата начала Дата начала

usascha

Новичок
UPDATE одного поля по полю из другой таблицы

Здравствуйте, все.

Есть у меня табличка с названиями регионов, которую я хотел бы нормализовать - вставить туда коды регионов. Значения этих кодов будут потом браться из другой таблички.
Я сделал прям-таки гениальный запрос :(, а он не работает:

Код:
UPDATE subscriber s, regions r
SET s.oblast=r.reg_code
WHERE s.oblast=r.reg_name

Такая "круговая порука" в запросе возможна или
1. надо изменить запрос? Тогда как, я не понимаю.
2. так сделать вообще нельзя.
 
попробовать самостоятельно что? Изменить записи вручную? Так их там много в базе-то!

Если Вы имеете ввиду другие варианты, то этот уже не первый, он, на мой взгляд, самый логичный, но...
 
Попробовать самостоятельно выполнить этот запрос на двух тестовых таблицах.
 
Так я его и выполнял на рабочих таблицах, которые и планирую изменить. Не срабатывает, как можно догадаться.
 
Ты в условии сам себе противоречишь

SET s.oblast=r.reg_code
WHERE s.oblast=r.reg_name
 
Странно: должен срабатывать. Какая ошибка? Какая версия базы?

-~{}~ 16.03.06 16:51:

Dim-Dim
нет, reg_name это не reg_code
 
MySQL 4.1.12
Запрос отправляю через phpmyadmin. Он просто возвращает результат 0.
 
Значит либо WHERE s.oblast=r.reg_name находит 0 строк, либо phpmyadmin не возвращает ошибки (хотя он вроде должен возвращать, но для отладки запросов консольный клент - имхо - удобней). Попробуй select from s, r WHERE s.oblast=r.reg_name.
 
Вот так проходит
Код:
UPDATE subscriber s, regions r
SET s.oblast=r.reg_code
WHERE s.oblast='Москва'
 
И какое значение база в качестве r.reg_code подставляет? Так сказать какими соображениями руководствуется?
 
Вообще хорошо что спросили. Я полез посмотреть и увидел, что некоторые r.reg_code стоят те что надо, а некоторые =1.

Я пробовал разные варианты - с кавычками и без - и когда какой результат теперь не найти.
 
Да, база поставит не знаю какой, возможно, первый попавшийся r.reg_code во все ячейки, где s.oblast='Москва'.
 
Если это нужно делать нерегулярно, то я бы написал на твоем месте простенький скриптик, типа: получить значение кода региона из одной талицы в переменную, затем обновить данные в другой таблице.
 
Сверху