组合2个Mysql更新状态(相同列、不同值、不同条件)

组合2个Mysql更新状态(相同列、不同值、不同条件),mysql,sql-update,Mysql,Sql Update,我一直在做一些搜索,但没有找到答案,所以我想我会在这里问,因为这里的人知道一切:) 我正在尝试将这两个更新查询合并到一个查询中 UPDATE addresses SET is_default='0' WHERE id!='1' UPDATE addresses SET is_default='1' WHERE id='1' 我想这应该很难实现,但我似乎无法解决:( 谢谢 Paul您可以使用CASE执行此操作: UPDATE addresses SET is_default = CASE WHE

我一直在做一些搜索,但没有找到答案,所以我想我会在这里问,因为这里的人知道一切:)

我正在尝试将这两个更新查询合并到一个查询中

UPDATE addresses SET is_default='0' WHERE id!='1'
UPDATE addresses SET is_default='1' WHERE id='1'
我想这应该很难实现,但我似乎无法解决:(

谢谢


Paul

您可以使用
CASE
执行此操作:

UPDATE addresses SET is_default = CASE WHEN id = 1 THEN 1 ELSE 0 END;
在您的示例中,您正在更新整个表,因此无论如何都不会从索引中受益,但如果您只执行了一部分值,您仍然希望保留where In(因为优化器很难确定如何使用索引)。例如:

UPDATE foo
  SET
    bar = CASE id WHEN 1 THEN 1 WHEN 2 THEN 0 ELSE bar END
    baz = CASE WHEN id = 3 THEN 7 ELSE baz END
  WHERE id IN (1,2,3)
(注意这两种不同的大小写语法)。

试试这个:

UPDATE addresses SET is_default= IF(id!='1', '0', '1')

我可以问一下原因吗?试图避免交易,或者??谢谢你的准确回答和例子。案例正是我想要的
UPDATE addresses SET is_default= IF(id!='1', '0', '1')