2012-06-03 50 views
1

這些twolinks與我想的這個問題有關,但是我沒有找到解決我的要求的方法,這是略有不同的。如何交換更新字段中的值

我有一個表,說是這樣的:

fruit   color 
-------------------- 
mango   red 
apple   red 
orange   yellow 
banana   green 

我需要UPDATEcolor以這樣的方式red成爲yellowyellow成爲red。這是更新查詢後表的外觀。

fruit   color 
-------------------- 
mango   yellow 
apple   yellow 
orange   red 
banana   green 

這個查詢不會很明顯。

UPDATE plant SET color = 'yellow' WHERE color = 'red'; 
UPDATE plant SET color = 'red' WHERE color = 'yellow' 

謝謝。

+1

你在你的例子查詢更新'fruit',不'color' – lanzz

+0

@lanzz哦愚蠢的錯誤,讓我改正。 – nawfal

回答

1

你可以做一個單一的查詢:

UPDATE plant 
SET color = IF(color = 'yellow', 'red', IF(color = 'red', 'yellow', color)) 
WHERE color IN ('red', 'yellow'); 
+0

就是我剛要說的! :)雖然我會試圖使用一個'CASE'表達式而不是嵌套的'IF' - 但僅僅是爲了可讀性,真的。 – eggyal

+0

當我的選擇很少時,我傾向於避免使用「CASE」,額外的噪音關鍵字爲我的眼睛提供了一個難以理解的查詢。 – lanzz

+0

@eggyal你可以發佈病例更新嗎? – nawfal

4
UPDATE plant SET color = CASE color 
    WHEN 'yellow' THEN 'red' 
    WHEN 'red' THEN 'yellow' 
    END 
WHERE color IN ('red', 'yellow') 
+0

謝謝eggyal,我更喜歡這個答案。 – nawfal