условное обновление в postgreSQL - PullRequest
0 голосов
/ 26 сентября 2018

Я тестирую некоторый условный рендеринг, чтобы увидеть, будет ли он вести себя так, как ожидалось, в небольшом масштабе, прежде чем внедрять его в таблицу большего размера.

Цель - создать запрос на обновление, который будет обновлять только те столбцы, которыепользователь ввел новые данные, и если данных нет, то с этими столбцами ничего не делается

. Вот мой случай, когда потом проверяю.Строка с нулевым значением не была обновлена ​​'newValue'

drop table if exists tester

create table tester (
id serial primary key
val TEXT,
)

insert into tester (val) values (null)

select * from tester

update tester 
set val = case 
when val = null 
then 'newValue' 
else val 
end;

Вот простой пример того, что я хочу произвести ($ 1 - ввод пользователя)

drop table if exists tester

create table tester (
id serial primary key
val TEXT,
)

insert into tester (val) values (null)

select * from tester

update tester 
set val = case 
when val != $1
then $1 
else val end
where id = 1

что я 'я ожидаю, что произойдет вставка для создания строки с идентификатором 1 и ячейкой val, равной нулю.

Затем в запросе на обновление, я думаю, что обновление проверит, сохранены ли данные в valв строке 1 НЕ равно входному значению, если это правда, тогда для входного значения будет установлено значение val для строки 1.

Правильны ли эта логика и синтаксис?Если нет, то что неверно?Спасибо!

1 Ответ

0 голосов
/ 26 сентября 2018

Предполагая, что пользовательский ввод $1 никогда не будет НЕДЕЙСТВИТЕЛЕН:


update tester 
set val = $1
where id = 1
and val <> $1 -- avoid updating with the same value
    ;

Примечание: ваш:

 `case when val != $1 then $1 else val end`

может быть уменьшен до:

 `case when val <> $1 then $1 else $1 end`

или:

 `$1`
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...