【问题标题】:Select Objects from Array of Objects that match a property in MYSQL JSON从与 MYSQL JSON 中的属性匹配的对象数组中选择对象
【发布时间】:2019-02-28 00:59:50
【问题描述】:

我在 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'))

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

谢谢

【问题讨论】:

    标签: mysql json mysql-json


    【解决方案1】:

    如果您使用的是 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 可以在here找到

    关于 JSON 表函数的更多信息可以找到here

    【讨论】:

      猜你喜欢
      • 2015-10-30
      • 2022-01-12
      • 1970-01-01
      • 2022-09-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-04-09
      相关资源
      最近更新 更多