我一直在做一些搜索,但一直沒能找到答案,所以我想問這裏,因爲這裏的人都知道一切:)結合2個Mysql更新說明(相同的col,不同的值,不同的條件)
我想將這2個更新查詢合併爲一個查詢。
UPDATE addresses SET is_default='0' WHERE id!='1'
UPDATE addresses SET is_default='1' WHERE id='1'
我想這應該是太難做到,但我似乎無法工作了:(
感謝
保羅
我一直在做一些搜索,但一直沒能找到答案,所以我想問這裏,因爲這裏的人都知道一切:)結合2個Mysql更新說明(相同的col,不同的值,不同的條件)
我想將這2個更新查詢合併爲一個查詢。
UPDATE addresses SET is_default='0' WHERE id!='1'
UPDATE addresses SET is_default='1' WHERE id='1'
我想這應該是太難做到,但我似乎無法工作了:(
感謝
保羅
您可以使用CASE
做到這一點:
UPDATE addresses SET is_default = CASE WHEN id = 1 THEN 1 ELSE 0 END;
在你的例子中,你正在更新整個表,所以你不會收益如果你只是做了一個值的子集,你仍然想離開where的位置(因爲它的優化器可能會弄清楚如何使用索引)。例如:
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語法)。
感謝您的確切答案和示例。 CASE正是我所期待的 – 2011-01-05 19:04:49
UPDATE addresses SET is_default=IF(id='1', '1', '0')
試試這個:
UPDATE addresses SET is_default= IF(id!='1', '0', '1')
請問爲什麼?試圖避免交易,或?? – 2011-01-05 18:48:04