如果之前有人问过我,我很抱歉,但是我用谷歌搜索,无法找到一个好的搜索结果。
我有一个看起来像这样的表:
col_a, col_b
a, 1,
a, 2,
a, 3,
b, 1,
b, 2,
c, 1,
我需要使用生成随机代码值的函数更新col_a中的值,但是'a'的所有值都需要更新为相同的值,对于'b'则相同。是否有系统的方法可以做这个,除了:
UPDATE tbl SET col_a = make_code() WHERE col_a = 'a';
UPDATE tbl SET col_a = make_code() WHERE col_a = 'b'; ...
答案 0 :(得分:1)
如果make_code()
真正像random()
一样工作,则多个update
语句不保证每个update
语句使用相同的代码。
您需要在实际更新发生之前计算代码(对于每个distinct
原始代码)。您可以使用子查询执行此操作,或者(更具可读性)CTE:
with codes as (
select distinct on (col_a)
col_a original_code,
make_code() generated_code
from tbl
)
update tbl
set col_a = generated_code
from codes
where col_a = original_code;