MySql中的条件更新

时间:2013-06-23 21:29:55

标签: mysql sql sql-update

我正在尝试从表中更新值,但我需要添加一些条件。我找到了CASE函数,但如果它是最好的方法,我不是。 这是一个例子:

我的表格例如是'relation'

userid1|userid2|name1|name2

我得到了例子:

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

输出:

     
4|3|bill|jack

我希望在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);

但它不起作用!有任何想法吗?非常感谢提前。

2 个答案:

答案 0 :(得分:47)

不幸的是,目前还不是很清楚你想要得到什么,但是你可以在SET

中正确使用条件UPDATE
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 演示。

答案 1 :(得分:1)

我知道我有点晚了,但我认为更容易阅读的解决方案是在 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)