mysql服务器-仅在不为null时更新值

kiz8lqtg  于 2021-06-18  发布在  Mysql
关注(0)|答案(3)|浏览(519)

我只想更新一个值,如果它不是null或空字符串,但我已经尝试了从 COALESCE(new_value, old_value)COALESCE(NullIf(RTrim(new_value),'')old_value) .
我完全迷茫的想法,我一直在浏览互联网的解决方案,但我找不到任何适合我。

$query = "UPDATE Person SET fornavn=COALESCE($escapedFornavn,fornavn), efternavn='$escapedEfternavn', alder='$escapedAlder', email='$escapedEmail', adresse='$escapedAdresse', telefon=$escapedTelefon WHERE brugernavn='$brugernavn'; ";

我希望上面的查询仅在用户在表单中键入值时更新每个值,如果表单为空,则只应使用旧值。

44u64gxh

44u64gxh1#

如评论中所建议的,在应用中处理。我希望这个问题能有所帮助。

UPDATE Person SET fornavn=IF(fornavn is NULL,NULL,new_value);
g52tjvyc

g52tjvyc2#

如果您使用mysql,您可以做到这一点 COALESCE 假设的功能。也 nullif 是必需的,但你用错了。
当您使用php生成这段代码时,必须考虑如何处理字符串值与 null 值(字符串值需要引号,null不需要引号):

$query = "UPDATE Person SET fornavn=COALESCE('$escapedFornavn',fornavn)"

将按预期工作,如果 $esapedFornavn 是有效字符串。但是,如果 $esapedFornavn==null 查询将看起来像第一个,而您需要第二个。。。

UPDATE Person SET fornavn=COALESCE('',fornavn);
UPDATE Person SET fornavn=COALESCE(null,fornavn);

因此,要实现所需的功能,您可以使用 nullif 将空字符串变为实字符串 nulls :

UPDATE Person SET fornavn=COALESCE(nullif('$escapedFornavn', ''),fornavn)

基本测试:

SELECT COALESCE(nullif(null,''),"oldvalue") -- will return "oldvalue", so no update.
SELECT COALESCE(nullif("newvalue",''),"oldvalue") -- will return "newvalue", so the change is persisted.

唯一的缺点是:不能将某个值设置为空字符串,因为这将保留旧值:

SELECT COALESCE( NULLIF('',  ''), "oldvalue") --returns oldvalue

一个解决方法是存储一个空格,然后使用 trim() 无论何时显示:

zf2sa74q

zf2sa74q3#

您应该考虑使用updateselect将数据放入查询中,然后使用

SET target.column = IF(source.column is invalid, target.column, source.column)

将列设置为自身时,不会更改它。
下面是一个可能的例子。

UPDATE p
   SET p.col1 = IF(q.col1 IS NULL OR LENGTH(q.col1) = 0, p.col1, q.col1),
       p.col1 = IF(q.col2 IS NULL OR LENGTH(q.col2) = 0, p.col2, q.col2),
       p.col1 = IF(q.col3 IS NULL OR LENGTH(q.col3) = 0, p.col3, q.col3),
               ...
 FROM Person AS p
 JOIN (
       SELECT 
           <<<value1>> col1,
           <<<value2>> col2,
           <<<value3>> col3,
               ...
      ) AS q
WHERE <<<whatever condition>>>

相关问题