结合2个Mysql更新语句(相同颜色,不同值,不同条件)

时间:2011-01-05 18:45:34

标签: mysql sql-update

我一直在做一些搜索,但未能找到答案,所以我想在这里问这里的人知道一切:)

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

UPDATE addresses SET is_default='0' WHERE id!='1'
UPDATE addresses SET is_default='1' WHERE id='1'

我认为这应该太难实现,但我似乎无法解决这个问题:(

由于

3 个答案:

答案 0 :(得分:2)

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

UPDATE addresses SET is_default = CASE WHEN id = 1 THEN 1 ELSE 0 END;

在您的示例中,您需要更新整个表格,因此无论如何您都不会从索引中获益,但如果您只是执行了一部分值,那么您仍然希望留在哪里(因为它非常值得怀疑,优化器可以弄清楚如何使用索引)。例如:

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)

(注意两种不同的CASE语法)。

答案 1 :(得分:0)

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

答案 2 :(得分:0)

试试这个:

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