【问题标题】:Conditional UPDATE in MySQLMySQL中的条件更新
【发布时间】:2013-06-20 08:56:10
【问题描述】:

我正在尝试UPDATE 表中的值,但我需要添加一些条件。我找到了函数CASE,但如果它是最好的方法我不是。

这是一个例子。我的表是“关系”:

用户 ID1 |用户 ID2 |名称1 |名称2

例如:

SELECT * 
FROM relation 
WHERE (userid1 = 3 AND userid2 = 4)
      OR (userid1 = 4 AND userid2 = 3);  

输出:

4 | 3 |账单 |杰克

我想在3和4之间的关系中更改用户3的名称,但我不知道是userid1还是userid2

我想到了案例:

UPDATE relation 
   CASE WHEN userid1 = 3 THEN SET name1 = 'jack' END 
        WHEN userid2 = 3 THEN SET name2 = 'jack' END 
WHERE (userid1 = 3 AND userid2 = 4) 
      OR (userid1 = 4 AND userid2 = 3);

但它不起作用!有什么想法吗?

非常感谢。

【问题讨论】:

标签: mysql sql sql-update


【解决方案1】:

不幸的是,你最终想要得到什么并不是很清楚,但这里是你如何在你的UPDATE 中正确使用条件SET

UPDATE relation 
   SET name1 = CASE WHEN userid1 = 3 THEN 'jack' ELSE name1 END,
       name2 = CASE WHEN userid2 = 3 THEN 'jack' ELSE name2 END
WHERE (userid1 = 3 AND userid2 = 4) 
   OR (userid1 = 4 AND userid2 = 3);

这里是 SQLFiddle 演示。

【讨论】:

  • 非常感谢您的帮助,我现在正在测试它,我会与您保持联系。 PS:我看到了你的格式改进,我会记住这一点,以便进一步发布
  • @peterm 我也在看这个问题,这个方法不能阻止返回结果中的受影响行的增加,我想用它来确认它是成功更新还是由于过时的值更新失败.
  • stackoverflow.com/a/35082542/3063226 是更好的解决方案!
【解决方案2】:

我知道我对此有点晚了,但我认为更易于阅读的解决方案是在 MySQL 中使用 IF() 函数:

UPDATE relation
    SET name1 = IF(userid1 = 3, 'jack', name1),
        name2 = IF(userid2 = 3, 'jack', name2)
WHERE (userid1 = 3 AND userid2 = 4) 
   OR (userid1 = 4 AND userid2 = 3);

IF函数是这样使用的:

IF(condition, value_if_true, value_if_false)

【讨论】:

    猜你喜欢
    • 2020-06-27
    • 2015-04-26
    • 1970-01-01
    • 2016-12-06
    • 1970-01-01
    • 2011-07-12
    • 2016-08-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多