我想在任何情况下更新一行,除非特定字段只是在另一个字段有某些条件时才更新。
在这种情况下,一个例子是我想要更新文章的时候。 articles
表有5列(id,caption,content,publishdate,published)published
是布尔值。
现在我希望在任何情况下都要更新特定行,但publishdate
只有在published
为真时才应更新。我想在一个查询中使用它。
有没有办法做这样的事情?
修改
我想在查询中检查published
的值,而不是在数据库中。类似的东西:
UPDATE articles SET (published AS b) = true, publishdate = (b==true? 'new date': b)
答案 0 :(得分:3)
UPDATE articles
SET publishdate = CASE WHEN published = 1 THEN <new value> ELSE publishdate END
[, ...]
[WHERE ...]
如果你想检查参数值,那么你也可以这样做:
UPDATE articles
SET publishdate = CASE WHEN @published = 1 THEN <new value> ELSE publishdate END
[, ...]
[WHERE ...]
答案 1 :(得分:3)
您可以使用inline IF
声明。例如
UPDATE articles
SET publishedDate = IF(published = 1, 'new date HERE', publishedDate)
-- WHERE condition here
这假定1 = true
,如果将布尔值存储为字符串,则IF(published = 'true',...
更新1
-- assumes 0 = false, 1 = true
SET @status := 1;
SET @newDate := CURDATE();
UPDATE articles
SET publishedDate = IF(1 = @status, @newDate, publishedDate),
published = @status
-- WHERE condition here