从与mysql json中的属性匹配的对象数组中选择对象

jfewjypa  于 2021-06-18  发布在  Mysql
关注(0)|答案(1)|浏览(398)

我在mysql数据库中有一个表,其中有一个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')) 如果有人能给我指出正确的方向或者给我一个解决这个问题的方法,那将是一个很大的帮助。
谢谢

ymdaylpp

ymdaylpp1#

如果您使用的是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小提琴可以在这里找到
关于json表函数的更多信息可以在这里找到

相关问题