2012-03-01 3 views
0

Oportunitati 테이블에 새 열을 추가 한 후 데이터베이스를 업데이트하기 위해 MYSQL 쿼리를 작성하고 있지만 중첩 된 if가 예상대로 작동하지 않습니다. 쿼리는 다음과 같습니다중첩 된 IF 문은 예상대로 작동하지 않습니까?

UPDATE Oportunitati SET Stadiu = 
if(Probabilitate < '20', '1', 
if(Probabilitate < '40', '2', 
if(Probabilitate < '60', '3', 
if(Probabilitate < '80', '4', 
if(Probabilitate < '100', '5', 
if(Probabilitate = '100', '6', '7')))))) 

내가 Probabilitate 0과 20 사이 인 경우는 20, 40, 등 그리고 100의 경우 마지막 6과 7 사이 인 경우가 있다면이 쿼리가 2, 1로 Stadiu을 설정하는 기대 이상

그러나 모든 괄호 안에 값이 있습니다.이 쿼리가 설정하는 유일한 값은 1과 7입니다. mysql에 중첩 된 IF에 대한 내용이 없습니까?

+0

왜 모든 숫자가 아포 슬로프로 싸여 있습니까? 네? – StilesCrisis

+0

고등학교 때부터 나와 짝을 지은 습관. 여기에 차이가 있다고 생각하지 마십시오. – Bogdan

+1

그 습관을 그만 두어야합니다. 숫자는 문자열이 아닙니다. – StilesCrisis

답변

1

대신 중첩 ifcase의 사용은 이러한 경우에 바람직하다 :

UPDATE Oportunitati SET Stadiu = 
CASE 
        WHEN Probabilitate < 20 
            THEN 1 
        WHEN Probabilitate < 40 
            THEN 2 
        WHEN Probabilitate < 60 
            THEN 3 
        WHEN Probabilitate < 80 
            THEN 4 
        WHEN Probabilitate < 100 
            THEN 5 
        WHEN Probabilitate = 100 
            THEN 6 
        ELSE 7 
END 
+0

감사합니다. 고려해 볼 것입니다. 문제는 실제로 mysql의 모든 가치를 고수하는 것이 저의 나쁜 습관이었습니다. 진절머리 나는 고등학생의 고마워. – Bogdan

+0

당신을 위해 mysql 캐스팅 유형을 걱정하지 마십시오 – triclosan

+0

Dunno, 그 (것)들을 고치면 그것을 고칠 수 있습니다. – Bogdan

0

도이 쿼리 -

UPDATE 
    Oportunitati 
SET 
    Stadiu = IF(Probabilitate <= 100, Probabilitate DIV 20 + 1, 7); 

당신이 부정적인 Probabilitate이있는 경우 다음 추가 할 또 하나의 조건 -

IF(Probabilitate <= 100, IF(Probabilitate < 0, 0, Probabilitate) DIV 20 + 1, 7) 
관련 문제