Saltar al contenido

Actualización de MySQL CASE WHEN / THEN / ELSE

Solución:

Prueba esto

UPDATE `table` SET `uid` = CASE
    WHEN id = 1 THEN 2952
    WHEN id = 2 THEN 4925
    WHEN id = 3 THEN 1592
    ELSE `uid`
    END
WHERE id  in (1,2,3)

Si id es secuencial comenzando en 1, el más simple (y más rápido) sería:

UPDATE `table` 
SET uid = ELT(id, 2952, 4925, 1592) 
WHERE id IN (1,2,3)

Como ELT () devuelve el N-ésimo elemento de la lista de cadenas: cadena1 si N = 1, cadena2 si N = 2, y así sucesivamente. Devuelve NULL si N es menor que 1 o mayor que el número de argumentos.

Claramente, el código anterior solo funciona si id es 1, 2 o 3. Si id era 10, 20 o 30, cualquiera de los siguientes funcionaría:

UPDATE `table` 
SET uid = CASE id 
WHEN 10 THEN 2952 
WHEN 20 THEN 4925 
WHEN 30 THEN 1592 END CASE 
WHERE id IN (10, 20, 30)

o el más simple:

UPDATE `table` 
SET uid = ELT(FIELD(id, 10, 20, 30), 2952, 4925, 1592) 
WHERE id IN (10, 20, 30)

Como FIELD () devuelve el índice (posición) de str en la lista str1, str2, str3, … Devuelve 0 si no se encuentra str.

Eso es porque te perdiste ELSE.

“Devuelve el resultado de la primera condición que es verdadera. Si no hubo ningún valor de resultado coincidente, se devuelve el resultado después de ELSE, o NULL si no hay una parte ELSE”. (http://dev.mysql.com/doc/refman/5.0/en/control-flow-functions.html#operator_case)

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)


Tags : /

Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *