更新一个具有一定条件的另一个字段

时间:2013-01-17 08:15:03

标签: mysql sql sql-update

我想在任何情况下更新一行,除非特定字段只是在另一个字段有某些条件时才更新。

在这种情况下,一个例子是我想要更新文章的时候。 articles表有5列(id,caption,content,publishdate,published)published是布尔值。

现在我希望在任何情况下都要更新特定行,但publishdate只有在published为真时才应更新。我想在一个查询中使用它。

有没有办法做这样的事情?

修改 我想在查询中检查published的值,而不是在数据库中。类似的东西:

UPDATE articles SET (published AS b) = true, publishdate = (b==true? 'new date': b)

2 个答案:

答案 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