MySql中的条件更新

Pie*_*bon 26 mysql sql sql-update

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

我的桌子就是'关系'

userid1|userid2|name1|name2

我得到了例如:

SELECT * 
  FROM realtion 
 WHERE (userid1 = 3 AND userid2 = 4)
    OR (userid1 = 4 AND userid2 = 3);  
Run Code Online (Sandbox Code Playgroud)

输出:

     
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);
Run Code Online (Sandbox Code Playgroud)

但它不起作用!有任何想法吗?首先十分感谢.

pet*_*erm 50

不幸的是,目前还不是很清楚你想要得到什么,但这里是你如何正确使用条件SETUPDATE

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);
Run Code Online (Sandbox Code Playgroud)

这是SQLFiddle演示.


Mar*_*hoh 9

我知道我有点晚了,但我认为更容易阅读的解决方案是使用 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);
Run Code Online (Sandbox Code Playgroud)

IF 函数的使用方式如下:

IF(condition, value_if_true, value_if_false)
Run Code Online (Sandbox Code Playgroud)