Нужно ли использовать функцию для перебора уникальных записей для массового обновления? - PullRequest
1 голос
/ 22 июня 2011

Запуск 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;

Чего мне не хватает?

1 Ответ

3 голосов
/ 22 июня 2011

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...