SQLite使用CASE配合json_array_length查询返回全NULL问题排查
问题原因
你误用了SQL中CASE表达式的两种语法格式:
- 简单CASE表达式:语法为
CASE 对比值 WHEN 匹配值1 THEN 结果1 ... ELSE 默认结果 END,逻辑是将CASE后声明的对比值,依次和每个WHEN后的匹配值做等值比对,返回第一个匹配的结果。 - 搜索CASE表达式:语法为
CASE WHEN 条件1 THEN 结果1 ... ELSE 默认结果 END,逻辑是依次判断每个WHEN后的条件是否成立,返回第一个成立条件对应的结果。
你当前的写法是在简单CASE表达式的位置传入了JSON类型的threads.participants字段作为对比值,而WHEN后的json_array_length(threads.participants) = 2返回的是布尔值,JSON数组和布尔值永远不可能相等,因此所有分支匹配逻辑失效,最终返回NULL。
修复方案
调整为搜索CASE表达式的写法即可,CASE后不需要加对比字段,直接写条件判断:
SELECT CASE WHEN json_array_length(threads.participants) = 2 THEN '2 Participants' ELSE 'More than 2 Participants' END AS "Number of Participants" FROM threads
额外优化提示:SQL标准中字符串常量建议使用单引号包裹,避免部分数据库将双引号识别为字段名标识符引发额外报错。
内容的提问来源于stack exchange,提问作者SnakeDoc65
相关产品推荐
相关产品推荐

