このクエリが機能しないのはなぜですか? :(ネストされたIFステートメントを置き換えようとしました "... SET key = IF(key> = 11、key-5、IF(lkey> 5、lkey + 2、lkey))"
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;
この句(および同様の句)の構文が間違っています
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式):
また、ネストされたCASEを使用する必要はありません。複数の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