我正在尝试从表中更新值,但我需要添加一些条件。我找到了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);
但它不起作用!有任何想法吗?非常感谢提前。
答案 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)