34

我正在尝试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);

但它不起作用!有任何想法吗?

首先十分感谢。

4

2 回答 2

69

不幸的是,你最终想要得到什么并不是很清楚,但这里是你如何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演示。

于 2013-06-23T21:36:26.487 回答
5

我知道我对此有点晚了,但我认为更容易阅读的解决方案是在 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)
于 2021-02-20T07:47:43.783 回答