2011-02-11 17 views
40

¿Por qué esta consulta no funciona? :(He intentado reemplazar anidada IF "... SET tecla l = SI (tecla l> = 11, tecla l - 5, SI (tecla l> 5, tecla l + 2, tecla l))"Sentencia CASE en la consulta SQLite

UPDATE pages 
SET lkey = CASE lkey WHEN lkey >= 11 THEN 
     lkey - 5 
    ELSE 
     CASE lkey WHEN lkey > 5 THEN 
      lkey + 2 
     ELSE 
      lkey 
     END 
    END, 
    rkey = CASE lkey WHEN lkey >= 11 THEN 
     rkey - 5 
    ELSE 
     CASE rkey WHEN rkey < 11 THEN 
      rkey + 2 
     ELSE 
      rkey 
     END 
    END 
WHERE rkey > 5 AND 
    lkey < 12; 

Respuesta

75

La sintaxis que está mal en esta cláusula (y otros similares)

CASE lkey WHEN lkey > 5 THEN 
     lkey + 2 
    ELSE 
     lkey 
    END 

es o

CASE WHEN [condition] THEN [expression] ELSE [expression] END 

o

CASE [expression] WHEN [value] THEN [expression] ELSE [expression] END 

Así que en su caso se leería:

CASE WHEN lkey > 5 THEN 
     lkey + 2 
    ELSE 
     lkey 
    END 

Mira la documentación (La expresión CASE):

http://www.sqlite.org/lang_expr.html

28

Además, no se tiene que utilizar CASEs anidados. Puede utilizar varias líneas WHEN-THEN y la línea ELSE también es opcional aunque lo recomiendo

CASE 
    WHEN [condition.1] THEN [expression.1] 
    WHEN [condition.2] THEN [expression.2] 
    ... 
    WHEN [condition.n] THEN [expression.n] 
    ELSE [expression] 
END 
Cuestiones relacionadas