运行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循环但语法或正确用法我没有正确实现。在尝试执行UPDATE语法之前尝试使SELECT工作,但遇到一些问题。
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;
我错过了什么?
答案 0 :(得分:3)
如果我理解正确,如果你想对表中的所有记录进行这种组合,只需从你的查询中删除你的where子句。