我在MySQL数据库中有一个表,其中有1个JSON类型的列city,该表存储具有以下结构的city对象的JSON数组:
{
"cities": [
{
"id": 1,
"name": "Mumbai",
"countryID": "9"
},
{
"id": 2,
"name": "New Delhi",
"countryID": "9"
},
{
"id": 3,
"name": "Abu Dhabi",
"countryID": "18"
}
]
}
我想从具有countryID = 90
的城市数组中选择对象,但由于对象数组存储在单列city
中而被困住了,这阻止了我执行(*)
与WHERE JSON_CONTAINS(city->'$.cities', JSON_OBEJECT('countryID', '90'))
。
我的查询看起来像这样,我什么也没得到
SELECT JSON_EXTRACT(city, '$.cities') FROM MyTable WHERE JSON_CONTAINS(city->'$.cities', JSON_OBJECT('countryID', '90'))
如果有人可以指出正确的方向或给我一个解决方案,那将是一个很大的帮助。
谢谢
答案 0 :(得分:0)
如果使用的是MySQL 8.0,则有一个称为JSON table functions
的功能。它将JSON数据转换为表格形式。然后,您可以过滤结果。
实现相同的查询如下
Select country
FROM json_cal,
JSON_TABLE(
city,
"$.cities[*]" COLUMNS(
country JSON PATH "$",
NESTED PATH '$.countryID' COLUMNS (countryID TEXT PATH '$')
)
) AS jt1
where countryID = 90;
可以找到数据库小提琴here
有关JSON表功能的更多信息,请参见here