Избегайте почти дублирования запросов в функции postgres plpgsql - PullRequest
0 голосов
/ 24 марта 2019

Есть ли лучший способ написать этот запрос в функции plpgsql, чем почти дублирование запроса дважды?Любой способ сказать, что если valB равно нулю, то оно должно совпадать с любым значением в colB, по существу, удаляясь из предложения where?

if (valB is not null) then
    update mytable set colA = valA where (colB, colC) = (valB, valC);
else
    update mytable set colA = valA where (colC) = (valC);
end if;

Ответы [ 2 ]

1 голос
/ 24 марта 2019

Вы можете использовать or.Я бы сказал это так:

update mytable 
   set colA = valA 
where colC = valC and
       (valb is null or colb = valb);
1 голос
/ 24 марта 2019

Вы можете использовать условие OR с параметром:

update mytable 
   set colA = valA 
where (valb is null and colC = valC)
   or (valb is not null and (colb, colc) = (valb, valc));
...