@scronheim

Как заполнить столбец с foreign key?

Добрый день, подскажите пожалуйста: есть таблица с foreign key и соответственно таблица словарь для него
Так же есть текстовое поле в основной таблице где хранится тоже самое что и в словаре, но текстом. Задача в том, что бы заполнить все поля с foreign key в соответствии с этим тектовым полем и словарем
CtS925W.png
Kj391Ci.png
  • Вопрос задан
  • 53 просмотра
Решения вопроса 1
@alexalexes
Это делается апдейтом с подзапросами.
update table tb
      set tb.type_id = (select tp.id from types tp where tp.name = tb.type_name limit 1) -- выбираем подзапросом id из справочника по совпадению наименования поля в обновляемой таблице
 where tb.type_id is null -- страховка, что будем обновлять не установленные значения
     and exists(select 1 from types tp where tp.name = tb.type_name) -- будем ставить ключ, если есть наименование в справочнике types

PS: Прежде чем выполнять update, убедитесь при помощи select с тем же where, что вы вставите нужные для вас значения в поля секции set. По принципу поговорки: "Семь раз select-ни - один раз update-ни".
PPS: Желательно, избегать ситуаций, когда вам периодически нужно нормализовывать структуру данных, в идеале, при insert-е нужно сразу определять ключик, а поле наименования использовать только тогда, когда нужного наименования нет в справочнике.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
UPDATE ... JOIN
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы