Pourquoi cette requête ne fonctionne pas? :( J'ai essayé de remplacer l'instruction IF imbriquée "... 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;
La syntaxe est incorrecte dans cette clause (et les similaires)
CASE lkey WHEN lkey > 5 THEN
lkey + 2
ELSE
lkey
END
C'est soit
CASE WHEN [condition] THEN [expression] ELSE [expression] END
ou
CASE [expression] WHEN [value] THEN [expression] ELSE [expression] END
Donc, dans votre cas, cela se lirait:
CASE WHEN lkey > 5 THEN
lkey + 2
ELSE
lkey
END
Consultez la documentation (l'expression CASE):
De plus, vous n'avez pas besoin d'utiliser des CAS imbriqués. Vous pouvez utiliser plusieurs lignes WHEN-THEN et la ligne ELSE est également facultative même si je le recommande
CASE
WHEN [condition.1] THEN [expression.1]
WHEN [condition.2] THEN [expression.2]
...
WHEN [condition.n] THEN [expression.n]
ELSE [expression]
END