2013-10-01 3 views
0

Я пытаюсь добавить предложение IF внутри оператора обновления. Мысль это было легко, но, похоже, это не так.Добавление if внутри оператора обновления

Так оно и есть. Он находится внутри хранимой процедуры.

FETCH cur1 INTO procId, procType, procVals, procLen, procUpdated, procPrivate, procRegional; 

    IF done THEN 
     LEAVE the_loop; 
    END IF; 

    UPDATE scores t1 
     JOIN scores t2 
     ON FIND_IN_SET(t1.id, t2.vals) 
     SET t1.private = t1.private+1, 
     IF procType = 3 THEN // Problem lies here 
      t1.regional = t1.regional+1; 
      ELSE IF procType = 4 THEN 
      t1.otherCol = t1.otherCol+1; 
      END IF; 
    WHERE t2.id = procId; 

Я застрял с IF в там. Помимо первого SET, мне также необходимо указать Update еще одну колонку с IF.

ответ

1
UPDATE scores t1 
JOIN scores t2 
ON FIND_IN_SET(t1.id, t2.vals) 

SET t1.private = t1.private+1 
t1.regional = IF (procType = 3, t1.regional + 1, t1.regional) 
t1.otherCol = IF (procType = 4, t1.otherCol + 1, t1.otherCol) 
WHERE t2.id = procId 
1
UPDATE scores t1 
JOIN scores t2 
ON FIND_IN_SET(t1.id, t2.vals) 
SET t1.private = t1.private+1, 
    CASE procType 
    WHEN 3 THEN t1.regional = t1.regional+1 
    WHEN 4 THEN t1.otherCol = t1.otherCol+1 
    END as Col 
WHERE t2.id = procId 
+0

Ошибка он бросает это в 'SQL Error (1064): Вы ошибка в синтаксисе SQL; проверьте руководство, соответствующее версии вашего сервера MySQL, для правильного синтаксиса для использования рядом с «CASE procType», где начинается 'CASE'. Я пробовал все, что мог. – jmenezes

+0

Я отредактировал сообщение, retry plz –

+0

Все тот же. – jmenezes

1

Было бы проще, чтобы разбить их на 2 отдельные операторы обновления, потому что вы обновляете к различным областям

IF procType = 3 THEN 
    UPDATE scores t1 
     JOIN scores t2 
     ON FIND_IN_SET(t1.id, t2.vals) 
    SET t1.private = t1.private+1, 
    t1.regional = t1.regional+1; 
    WHERE t2.id = procId; 

ELSE IF procType = 4 THEN 

    UPDATE scores t1 
     JOIN scores t2 
     ON FIND_IN_SET(t1.id, t2.vals) 
    SET t1.private = t1.private+1, 
     t1.otherCol = t1.otherCol+1; 
    WHERE t2.id = procId; 
Смежные вопросы