#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: обновленный ответ на ваш комментарий.