SQL if not null 更新

maf*_*tis 2 mysql sql sql-update

我有这个查询

UPDATE users SET username = Param1,email = Param2,PASSWORD = Param3 WHERE id = Param4;
Run Code Online (Sandbox Code Playgroud)

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

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

更新

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

关于逻辑

我认为有些人误解了我的问题,

如果我通过表单发送新值,我希望我的列值email和更改,password

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

因此,只需更新每一列,以防它们的值不是空字符串。

Cai*_*ard 5

像这样

UPDATE users 
SET 
  username = Param1,
  email = COALESCE(Param2, email),
  password = COALESCE(Param3, password)
WHERE id = Param4;
Run Code Online (Sandbox Code Playgroud)

COALESCE 从左到右工作,采用第一个非空参数。如果您提供 null 作为 Param2,它会将电子邮件更新为电子邮件(无更改)。如果您向 Param2 提供一个值,coalesce 将返回该非空值,因此电子邮件将更新为 param2 的值

Ps:理解您的请求是“我将在参数中提供空值或值。如果我提供空值,我不想更新数据库表。如果我提供值,我确实想更新数据库表”

对我来说,这似乎比你的问题的读法更合乎逻辑,即“如果我的表值对于电子邮件为空,那么我永远希望它保持为空,并且永远不希望我在参数中提供的任何值写入表中”