2012-06-03 6 views
1

이러한 twolinks은이 질문과 관련이 있습니다. 그러나 약간 다르지만 요구 사항을 해결할 방법을 찾지 못했습니다. 나는 테이블이필드의 값을 교환하는 방법

는 다음과 같이 말한다 : 나는 redyellowyellowred을하게된다 방식으로 UPDATE 필드 color 필요

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

. 다음은 업데이트 쿼리 이후의 테이블 모양입니다.

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

가 아닌' – lanzz

+0

이 @lanzz 오 바보 오류가, 내가 그것을 수정하자 color'. . – nawfal

답변

1

당신은 하나의 쿼리에서 그것을 할 수 있습니다 : 당신은 당신의 예제 쿼리에서`fruit`을 업데이트하고

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

그냥 내가하고 싶은 말! :) 중첩 된 IF보다는 하나의 'CASE'표현식을 사용하도록 유혹 될지라도, 실제로는 가독성을 위해서만 사용됩니다. – 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

관련 문제