【发布时间】:2020-10-12 16:25:57
【问题描述】:
我有 MySQL (perl) 的代码:
UPDATE pages
SET rkey = rkey + 2,
lkey = IF(lkey >= $key, lkey + 2, lkey)
WHERE rkey >= $key
我需要将此代码与 SQLite 一起使用,但不支持 IF() 函数。我能做什么?
【问题讨论】:
标签: sql sqlite if-statement
我有 MySQL (perl) 的代码:
UPDATE pages
SET rkey = rkey + 2,
lkey = IF(lkey >= $key, lkey + 2, lkey)
WHERE rkey >= $key
我需要将此代码与 SQLite 一起使用,但不支持 IF() 函数。我能做什么?
【问题讨论】:
标签: sql sqlite if-statement
对于通用 SQL,您可以使用 CASE:
CASE 用于向 SQL 提供 if-then-else 类型的逻辑。它的语法是:
SELECT CASE ("column_name") WHEN "condition1" THEN "result1" WHEN "condition2" THEN "result2" ... [ELSE "resultN"] END FROM "table_name"
来自http://www.sqlite.org/lang_expr.html 部分“CASE 表达式”
例如
UPDATE pages
SET rkey = rkey + 2,
lkey = CASE WHEN lkey >= $key THEN lkey + 2 ELSE lkey END
WHERE rkey >= $key
另一个关于 SQLite 和 CASE 的链接(带有子选择更新示例)http://sqlite.awardspace.info/syntax/sqlitepg09.htm
CASE 可用于通用 SQL 中的 UPDATE,但我没有关于 SQLite 支持使用 CASE 进行更新的信息
http://www.craigsmullins.com/ssu_0899.htm 部分“修改数据时使用 CASE 表达式”
【讨论】:
SQLite 版本 3.32.0 和更新的支持IIF。
如果 X 为真,iif(X,Y,Z) 函数返回值 Y,否则返回 Z。
iff(X,Y,Z) 函数在逻辑上等同于并生成与 CASE 表达式“CASE WHEN X THEN Y ELSE Z END”相同的字节码。
例如
UPDATE pages
SET rkey = rkey + 2,
lkey = IIF(lkey >= $key, lkey + 2, lkey)
WHERE rkey >= $key;
【讨论】:
IIF,于 2020-05-22 发布
UPDATE pages
SET rkey = rkey + 2,
lkey = IF(lkey >= $key, lkey + 2, lkey)
WHERE rkey >= $key
???它到
UPDATE pages
SET lkey = lkey + 2
WHERE rkey >= $key AND lkey >= $key
UPDATE pages
SET rkey = rkey + 2,
WHERE rkey >= $key
不是更好吗?
【讨论】: