我一直在做一些搜索,但未能找到答案,所以我想在这里问这里的人知道一切:)
我正在尝试将这两个更新查询合并到一个查询中。
UPDATE addresses SET is_default='0' WHERE id!='1'
UPDATE addresses SET is_default='1' WHERE id='1'
我认为这应该太难实现,但我似乎无法解决这个问题:(
由于
保
答案 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')