【问题标题】:Update each record with a random number within a range用一个范围内的随机数更新每条记录
【发布时间】:2017-07-31 01:12:04
【问题描述】:

我想用一个随机生成的值更新员工表 generate_series(9353500001234, 9353500001237) 并且还需要确保不应该更新重复的值。 当我尝试将员工表与 generate_series 连接时,它会导致交叉产品。请指教

CREATE TABLE employee
(
  member_number integer,
  gs1_src_acct_num bigint,
  CONSTRAINT employee_gs1_src_acct_num_key UNIQUE (gs1_src_acct_num)
)  
INSERT INTO lcdm_lnd.employee(member_number) VALUES (7360909);
INSERT INTO lcdm_lnd.employee(member_number) VALUES (3142554);
INSERT INTO lcdm_lnd.employee(member_number) VALUES (1510423);
INSERT INTO lcdm_lnd.employee(member_number) VALUES (9605961);

【问题讨论】:

  • 您要更新哪个字段?
  • gs1_src_acct_num 需要通过在 9353500001234 和 9353500001237 之间的范围内随机选择一个值来填充

标签: sql postgresql postgresql-9.5


【解决方案1】:

我认为这是你想要的:

update employee
    set gs1_src_acct_num = e2.new_gs1_src_acct_num
    from (select e2.*,
                 (row_number() over (order by random()) - 1 + 9353500001234) as new_gs1_src_acct_num
          from employee e2
         ) e2
     where e2.member_number = e.member_number;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-04-08
    • 2011-12-16
    • 1970-01-01
    • 1970-01-01
    • 2019-08-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多