我在MySQL中有一个表,其中每一行包含从另一个系统返回的JSON。 JSON看起来像:
[{"userId": "Dave"},{"userId": "Mary", "errorCode" : "DB Fail"}, {"userId": "Lorenza", "errorCode": "Web Error"}]
我只对包含错误代码的数组成员感兴趣。将来,这些将被解析为他们自己的表的单独行,但同时MySql提供了一种仅使用errorCode提取这些行的方法吗?
我可以使用JSON_EXTRACT仅提取errorCodes
JSON_EXTRACT(jsonData, '$[*].errorCode') AS errorCodes
但我真的想要其余成员(上例中的userId)
答案 0 :(得分:0)
您可以使用JSON_CONTAINS函数查找带有errorCode的记录,然后在这些记录上使用JSON_EXTRACT。将JSON_CONTAINS放在where子句
中答案 1 :(得分:0)
我认为你不能用没有已知元素数量边界的单个查询来做这件事,但是你可以使用存储过程来运行循环。
e.g。每次迭代运行LOCATE以查找“errorCode”的位置,并使用该位置运行SUBSTR和/或SUBSTRING_INDEX以获取用户标识值并将其附加到另一个变量。循环变量只是LOCATE查询中使用的偏移量。