Запуск Postgres 7.4 (да, мы обновляем), и у меня есть таблица, где мы объединяем три поля в новое поле, если поле имеет значение.
Пример данных:
record_id | old_field_1 | old_field_2 | old_field_3 | new_field
+---------+-------------+-------------+-------------+----------+
12345 | blah | foo | | <-- new_field = foo
12346 | | | what | <-- new_field = what
12347 | | | | <-- new_field IS NULL
12348 | hello | | | <-- new_field = hello
Таким образом, это работает ниже для одной записи:
UPDATE db_table
SET new_field = CASE
WHEN old_field_3 IS NOT NULL THEN old_field_3
WHEN old_field_2 IS NOT NULL THEN old_field_2
WHEN old_field_1 IS NOT NULL THEN old_field_1
ELSE new_field
END
WHERE record_id = 123456
И следующая запись будет
UPDATE db_table
SET new_field = CASE
WHEN old_field_3 IS NOT NULL THEN old_field_3
WHEN old_field_2 IS NOT NULL THEN old_field_2
WHEN old_field_1 IS NOT NULL THEN old_field_1
ELSE new_field
END
WHERE record_id = 123457
old_field_ # (1,2,3) - все это разные значения.Если old_field_3 IS NOT NULL, используйте это значение для new_field, иначе проверьте следующее значение.Но каждая запись имеет свое уникальное значение, которое необходимо обновить
Но я хотел бы перебрать все записи в базе данных.
Попытка цикла FOR, но синтаксис или правильное использование I 'Я не реализую правильно.Просто пытаюсь заставить работать SELECT, прежде чем пытаться выполнить синтаксис UPDATE, но возникают некоторые проблемы.
FOR a_record IN SELECT * FROM db_table LOOP
RAISE NOTICE 'record_id - %', a_record.record_id;
RAISE NOTICE 'old_field_1 - %', a_record.old_field_1;
END LOOP;
Чего мне не хватает?