Обновите каждую запись случайным числом в диапазоне

Я хочу обновить таблицу сотрудников значением, сгенерированным случайным образом из 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);

person Harinath Arasu    schedule 31.07.2017    source источник
comment
Какое поле вы хотите обновить?   -  person Gordon Linoff    schedule 31.07.2017
comment
gs1_src_acct_num необходимо заполнить, выбрав случайное значение в диапазоне от 9353500001234 до 9353500001237.   -  person Harinath Arasu    schedule 31.07.2017


Ответы (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;
person Gordon Linoff    schedule 31.07.2017