CASE 语句 Postgres

CASE Statement Postgres

我正在尝试通过 REST API 修补一个对象。我的查询有问题...

// query 
var query = "UPDATE users SET \
            first_name = CASE WHEN  != '' THEN first_name =  ELSE first_name = first_name END, \
last_name = CASE WHEN  != '' THEN last_name =  ELSE last_name = last_name END, \
date_updated = now()\
WHERE username = "

// params
var params = [
    request.params.user_id,
    request.body.first_name || '',
    request.body.last_name || ''
];

// query runs 
sharedPgClient.query(query,params,function(err, res){
    callback(err, res);
});

我得到的结果是成功的,但是除我没有设置的用户名外,每一列都设置为 "false"。我没有将任何东西设置为真/假。我尝试过不同的价值观等,但我迷路了。请帮忙

您正在做的是在一种情况下使用 first_name = 表达式的结果,在另一种情况下使用 first_name = first_name 的结果。两者都是布尔值。

你想写的大概是:

... SET first_name = CASE WHEN  <> '' THEN  ELSE first_name END ...

同上last_name

whenelse 子句取值,而不是 SQL 片段。例如,first_name = 是一个布尔表达式,它的计算结果可能是 truefalse,具体取决于 first_name 的值。相反,您只需要使用您尝试设置的值:

var query = "UPDATE users SET \
            first_name = CASE WHEN  != '' THEN  ELSE first_name END, \
            // Here -----------------------------^
            last_name = CASE WHEN  != '' THEN  ELSE last_name END, \
            // And here ------------------------^
            date_updated = now()\
            WHERE username = "