Мне нужно обновить поле идентификатора для таблицы, не затрагивая никаких других полей

#sql #postgresql

#sql #postgresql

Вопрос:

У меня есть вызываемая таблица _field . Теперь, по какой-то причине, поле внутри таблицы с именем block запуталось и теперь содержит неправильные номера блоков. У меня есть данные по умолчанию _field , но некоторые другие поля больше не могут быть по умолчанию из-за внешних ограничений и прочего, поэтому я не могу просто восстановить данные по умолчанию. Итак, на данный момент я создал новую таблицу с именем tmp_field и заполнил ее _field данными по умолчанию.

Теперь мне нужен запрос, который берет данные _field и изменяет все block числа в _field соответствии с block числами из tmp_field .

Другой способ выразить это следующим образом:
он проверяет каждую строку _field , и если какое-либо поле (например fieldid , или name ) совпадает с тем же полем tmp_field , то оно изменяет значение блока в _field , чтобы оно соответствовало значению блока tmp_field в.

Примечание: я использую Postgresql 9.1.

Спасибо за все.

Ответ №1:

 UPDATE _field
    SET block = tmp_field.block
    FROM tmp_field
    WHERE _field.fieldid = tmp_field.fieldid
        OR _field.name = tmp_field.name
 

Комментарии:

1. О, спасибо, особенно за быстрый ответ. Я пробовал что-то подобное, но это не сработало, потому что я не знал об FROM этом предложении. Кроме того, fieldid должно быть _field.fieldid то же самое с name , но да, это работает. Большое спасибо.

2. @zermy: обновленный ответ на ваш комментарий.