Error number: 3665; Symbol: ER_MISSING_JSON_TABLE_VALUE; SQLSTATE: 22035
Message: Missing value for JSON_TABLE column ‘%s’
错误说明
ER_MISSING_JSON_TABLE_VALUE是MySQL表示在使用JSON_TABLE函数处理JSON值时,因没有找到对应的键或对应行导致缺少值。
常见案例
示例1:如下语句声明了一个表来表示一个JSON数据,其中test_json表示一个JSON值用于填充:
CREATE TABLE test_table(
id INT,
json_doc JSON
);
INSERT INTO test_table(id, json_doc)
VALUES (1, ‘{“name”: “Mike”, “age”: 27}’);
SELECT *
FROM test_table
LEFT JOIN JSON_TABLE(json_doc, ‘$’
COLUMNS (
name VARCHAR(50) PATH ‘$.name’,
age INTEGER PATH ‘$.age’
)
)AS jt USING(json_doc);
这里的JSON_TABLE查询会返回以下错误信息:
Error Code: 3665. JSON column ‘name’ cannot be found in the value
解决方法
有几种方法可以解决ER_MISSING_JSON_TABLE_VALUE的错误:
方法1:检查JSON文档是否正确,即键和值是否存在,列表中每个数据项是否有效。
方法2:使用IFNULL或ISNULL函数可以处理NULL值,而不是ER_MISSING_JSON_TABLE_VALUE。
例如:
SELECT IFNULL(name, ‘N/A’) AS name
FROM test_table
LEFT JOIN JSON_TABLE(json_doc, ‘$’
COLUMNS (
name VARCHAR(50) PATH ‘$.name’,
age INTEGER PATH ‘$.age’
)
)AS jt USING(json_doc);
方法3:可以使用JSON_VALUE或JSON_EXTRACT函数来获取JSON值,而不是使用JSON_TABLE。