小编典典

SQL(如果不为空)更新

sql

我有这个查询

UPDATE users SET username = Param1,email = Param2,PASSWORD = Param3 WHERE id = Param4;

这正在更新我的用户行, 但我想说: 如果电子邮件或密码 不为null,请 更新它们,否则将它们保持原样。

那我的查询应该是什么样的?

更新

通过下面的朋友代码,我现在意识到我的表单发送的是空字符串''而不是空字符串,null所以我认为我需要检查密码是否不是密码''以及电子邮件的密码是否''不是null,而不是密码是否为null。

关于逻辑

我想我的问题有些误解了我,

我希望我的column的值可以更改,如果我通过表单发送新值email,则可以password更改,

例如,如果我没有在表单中填写电子邮件输入,则无需更改(更新)数据库中的电子邮件。

因此,只要它们的值不是空字符串,就更新它们。


阅读 209

收藏
2021-04-15

共1个答案

小编典典

如果电子邮件或密码不为null,请更新它们,否则将它们保持原样。

您可以case为此使用表达式。我认为您想要的逻辑是:

UPDATE users 
SET 
    username = Param1
    email = case when email is not null then Param2 end,
    password = case when password is not null then Param3 end
WHERE id = Param4;

或者,如果你想更新的电子邮件和密码,如果 两者 都没有null,那么:

UPDATE users 
SET 
    username = Param1
    email = case when email is not null and password is not null then Param2 end,
    password = case when email is not null and password is not null then Param3 end
WHERE id = Param4;

现在,问题已更新,并且我了解到,仅当email和password 参数 都不为空字符串时,您才想执行更新。因此,您实际上要进行 过滤
。我将其表述为:

UPDATE users 
SET username = Param1, email = Param2, password = Param3 
WHERE id = Param4 and Param2 <> '' and Param3 <> ''

或者,如果您想将两个参数的逻辑分开:

UPDATE users 
SET 
    username = Param1, 
    email = case when Param2 <> '' then Param2 else email end, 
    password = case when Param3 <> '' then Param3 else password end
WHERE id = Param4;
2021-04-15