2015-02-25 2 views
0

Прошу прощения, если это было задано раньше, но я googled и не смог найти хороший поиск, чтобы узнать.Обновление нескольких строк в PGSQL до того же значения

У меня есть таблица, которая выглядит следующим образом:

col_a, col_b 
    a,  1, 
    a,  2, 
    a,  3, 
    b,  1, 
    b,  2, 
    c,  1, 

Мне нужно обновить значения в col_a, используя функцию, которая генерирует случайное значение кода, но все значения «а» необходимо обновить до то же значение, то же самое для «б» и т.д. есть ли систематический способ сделать это, кроме:

UPDATE tbl SET col_a = make_code() WHERE col_a = 'a'; 
UPDATE tbl SET col_a = make_code() WHERE col_a = 'b'; ... 

ответ

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; 

SQLFiddle

+0

Вы абсолютно правы, и это работает прекрасно, что не происходило со мной, в моем примере. Спасибо! – rp372

Смежные вопросы