2011-02-11 176 views
40

为什么这个查询不起作用? :(我试图替换嵌套IF语句 “... SET LKEY = IF(LKEY> = 11,LKEY - 5,IF(LKEY> 5,LKEY + 2,LKEY))”SQLite查询中的CASE语句

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; 

回答

75

的语法是错误的这一条款(以及类似的)

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

这是不是

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

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

所以你的情况,将阅读:

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

退房的文档(CASE表达式):

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

28

而且,你不必使用嵌套的情况。你可以使用几个WHEN-THEN线,ELSE线也是可选的,尽管我推荐它

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