有条件地更新同一记录中另一个字段的字段

时间:2019-01-19 19:07:54

标签: mysql mysqli

如果一个字段的值等于NULL,我试图使用同一记录中另一个字段的值来更新它,但是它不起作用,也不会给我任何错误。我尝试了这两个查询,但它们没有完成工作!

update tracking 
inner join ( select `ID`, `start_date` from tracking where `ID` =20212) t2
ON tracking.`ID` = t2.`ID`
SET `design date`="2019-01-19",
`design date original`= IF(`design date original` = NULL,t2.`start_date`, `design date original`) 
where tracking.`ID` =20212

'

update tracking 
SET `design date`="2019-01-19",
`design date original`= IF(`design date original` = NULL,`start_date`, `design date original`) 
where `ID` =20212

1 个答案:

答案 0 :(得分:0)

  • <expr> = NULL永远不会为真,即使<expr>NULL也是如此。要检查是否有NULL,请使用IS NULL<expr> IS NULL
  • 但是您在这里甚至不需要if()。有一个特殊的函数coalesce(),它从参数列表中返回第一个非空表达式。
  • 请勿使用双引号将字符串文字括起来。尽管MySQL普遍接受这一点,但它可能会导致不想要的结果,因为SQL中的双引号实际上是用来包含标识符(例如列名)的。因此,最好始终在字符串文字周围使用单引号。
  • 而且标识符(列名)中可以有空格,但也不是最好的主意。如果您想节省一些麻烦,请不要使用它们。


UPDATE `tracking`
       SET `design date` = '2019-01-19',
           `design date original` = coalesce(`design date original`,
                                             `start_date`) 
       WHERE `ID` = 20212;