2011-01-05 16 views
1

我一直在做一些搜索,但一直沒能找到答案,所以我想問這裏,因爲這裏的人都知道一切:)結合2個Mysql更新說明(相同的col,不同的值,不同的條件)

我想將這2個更新查詢合併爲一個查詢。

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

我想這應該是太難做到,但我似乎無法工作了:(

感謝

保羅

+0

請問爲什麼?試圖避免交易,或?? – 2011-01-05 18:48:04

回答

2

您可以使用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語法)。

+0

感謝您的確切答案和示例。 CASE正是我所期待的 – 2011-01-05 19:04:49

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

試試這個:

UPDATE addresses SET is_default= IF(id!='1', '0', '1') 
相關問題