2011-02-11 12 views
40

Dlaczego to zapytanie nie działa? :(Próbowałem zastąpić zagnieżdżonych IF "... SET lkey = IF (lkey> = 11, lkey - 5, IF (lkey> 5, lkey + 2, lkey))"Instrukcja CASE w zapytaniu 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; 

Odpowiedz

75

Składnia jest źle w tym punkcie (i podobnych struktur)

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

to albo

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

lub

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

Więc w twoim przypadku będzie to czytać:

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

Sprawdź dokumentację (wyrażenie CASE):

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

28

Ponadto, nie trzeba używać zagnieżdżonych przypadków. Możesz użyć kilku linii WHEN-THEN, a linia ELSE jest opcjonalna, mimo że polecam ją

Powiązane problemy