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
相关产品推荐
相关产品推荐

