Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Postgresql postgres中基于条件的部分更新_Postgresql - Fatal编程技术网

Postgresql postgres中基于条件的部分更新

Postgresql postgres中基于条件的部分更新,postgresql,Postgresql,我想对一个表进行更新,更新的列取决于一个条件。我已经知道如何创建条件WHERE子句,如下所示: UPDATE table SET colA='apple', colB='banana' WHERE colC='fruits 但是,我希望更新基于一个条件,这样,如果条件为false,则只有colA将更新。达到以下程度的事物: UPDATE table SET colA='apple', (if $1=true colB='banana') WHERE colC='fruits 我找到的唯一资源

我想对一个表进行更新,更新的列取决于一个条件。我已经知道如何创建条件WHERE子句,如下所示:

UPDATE table SET colA='apple', colB='banana' WHERE colC='fruits
但是,我希望更新基于一个条件,这样,如果条件为false,则只有colA将更新。达到以下程度的事物:

UPDATE table SET colA='apple', (if $1=true colB='banana') WHERE colC='fruits

我找到的唯一资源与第一个示例有关。这在研究生中可能吗?我希望避免对此类条件进行单独查询。

您可以使用
CASE
表达式来控制更新B列的逻辑:

UPDATE table
SET
    colA = 'apple',
    colB = CASE WHEN $1 = true THEN 'banana' ELSE colB END
WHERE
    colC = 'fruits';

$1
标志设置为true时,B列将被更新为
banana
,否则更新将被设置为当前值,这实际上是一个不可操作的值。

您可以使用
CASE
表达式来控制更新B列的逻辑:

UPDATE table
SET
    colA = 'apple',
    colB = CASE WHEN $1 = true THEN 'banana' ELSE colB END
WHERE
    colC = 'fruits';

$1
标志设置为true时,B列将更新为
banana
,否则更新将只设置为当前值,这实际上是一个不可操作的值。

a
CASE
语句可能会帮助您:

UPDATE table
SET colA = 'apple',
    colB = CASE WHEN $1 = true THEN 'banana' ELSE colB END
WHERE colC = 'fruits';

但是,可能存在SQL注入的风险,在这种情况下,最好由应用程序逻辑选择两个单独的查询

一个
案例
陈述可能会帮助您:

UPDATE table
SET colA = 'apple',
    colB = CASE WHEN $1 = true THEN 'banana' ELSE colB END
WHERE colC = 'fruits';
但是,可能存在SQL注入的风险,在这种情况下,最好由应用程序逻辑选择两个单独的查询