2011-02-11 10 views
40

なぜこのクエリが機能しないのですか? IF文:(私は、ネストされた置き換えることを試みた "... SET LKEY = IF(LKEY> = 11、LKEY - 5、(LKEY> 5、LKEY + 2、LKEY)IF)"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行もオプションで入力してください。