1

我在 MySQL 数据库中有一个包含 1 个 JSON 类型列 city 的表,该表存储具有以下结构的城市对象的 JSON 数组:

{
    "cities": [
        {
            "id": 1,
            "name": "Mumbai",            
            "countryID": "9"
        },
        {
            "id": 2,
            "name": "New Delhi",            
            "countryID": "9"
        },
        {
            "id": 3,
            "name": "Abu Dhabi",            
            "countryID": "18"
        }
    ]
}

我想从 city 数组中选择对象,countryID = 90但我被卡住了,因为对象数组存储在单个列city中,这阻止了我执行(*)with 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'))

如果有人能指出我正确的方向或给我一个解决方案,那将是一个很大的帮助。

谢谢

4

1 回答 1

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;

DB Fiddle 可以在这里找到

有关 JSON 表函数的更多信息,请参见此处

于 2018-10-26T18:16:59.907 回答