You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MySQL查询嵌套JSON值在指定数组中的行时出现列不存在报错

解决JSON查询中别名无法在WHERE子句使用的问题

问题原因

SQL的执行顺序里,WHERE子句的解析和执行早于SELECT子句,你在SELECT中定义的别名metadata在WHERE阶段还未被创建,这就是报错Unknown column 'metadata' in 'where clause'的根源。

解决方案

方案1:重复JSON提取表达式

直接在WHERE子句中使用完整的JSON_EXTRACT逻辑,替代别名:

SELECT JSON_EXTRACT(eagerly_loaded_data, "$.Metadata") AS metadata 
FROM worker_items 
WHERE JSON_EXTRACT(eagerly_loaded_data, "$.Metadata") IN ('metadata1', 'metadata2');

方案2:用HAVING子句过滤

HAVING子句在SELECT之后执行,能够识别SELECT中定义的别名:

SELECT JSON_EXTRACT(eagerly_loaded_data, "$.Metadata") AS metadata 
FROM worker_items 
HAVING metadata IN ('metadata1', 'metadata2');

方案3:使用JSON_CONTAINS(MySQL适用)

如果你的数据库是MySQL,可以用更简洁的JSON_CONTAINS函数直接检查嵌套值是否在目标集合内:

SELECT JSON_EXTRACT(eagerly_loaded_data, "$.Metadata") AS metadata 
FROM worker_items 
WHERE JSON_CONTAINS('["metadata1", "metadata2"]', JSON_EXTRACT(eagerly_loaded_data, "$.Metadata"));

内容的提问来源于stack exchange,提问作者user5405648

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 02:50:40