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

usascha

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

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

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

Код:
UPDATE subscriber s, regions r
SET s.oblast=r.reg_code
WHERE s.oblast=r.reg_name
Такая "круговая порука" в запросе возможна или
1. надо изменить запрос? Тогда как, я не понимаю.
2. так сделать вообще нельзя.
 

usascha

Новичок
попробовать самостоятельно что? Изменить записи вручную? Так их там много в базе-то!

Если Вы имеете ввиду другие варианты, то этот уже не первый, он, на мой взгляд, самый логичный, но...
 

svetasmirnova

маленький монстрик
Попробовать самостоятельно выполнить этот запрос на двух тестовых таблицах.
 

usascha

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

Dim-Dim

looking...
Ты в условии сам себе противоречишь

SET s.oblast=r.reg_code
WHERE s.oblast=r.reg_name
 

svetasmirnova

маленький монстрик
Странно: должен срабатывать. Какая ошибка? Какая версия базы?

-~{}~ 16.03.06 16:51:

Dim-Dim
нет, reg_name это не reg_code
 

usascha

Новичок
MySQL 4.1.12
Запрос отправляю через phpmyadmin. Он просто возвращает результат 0.
 

svetasmirnova

маленький монстрик
Значит либо WHERE s.oblast=r.reg_name находит 0 строк, либо phpmyadmin не возвращает ошибки (хотя он вроде должен возвращать, но для отладки запросов консольный клент - имхо - удобней). Попробуй select from s, r WHERE s.oblast=r.reg_name.
 

usascha

Новичок
Вот так проходит
Код:
UPDATE subscriber s, regions r
SET s.oblast=r.reg_code
WHERE s.oblast='Москва'
 

svetasmirnova

маленький монстрик
И какое значение база в качестве r.reg_code подставляет? Так сказать какими соображениями руководствуется?
 

usascha

Новичок
Вообще хорошо что спросили. Я полез посмотреть и увидел, что некоторые r.reg_code стоят те что надо, а некоторые =1.

Я пробовал разные варианты - с кавычками и без - и когда какой результат теперь не найти.
 

svetasmirnova

маленький монстрик
Да, база поставит не знаю какой, возможно, первый попавшийся r.reg_code во все ячейки, где s.oblast='Москва'.
 

Maxxon

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