使用 mysql 工作台查询 mysql json 数组

Posted

技术标签:

【中文标题】使用 mysql 工作台查询 mysql json 数组【英文标题】:Querying on mysql json array using mysql workbench 【发布时间】:2022-01-07 19:56:21 【问题描述】:

这是我的 json 数据:


  "TransactionId": "1",
  "PersonApplicant": [
    
      "PersonalId": "1005",
      "ApplicantPhone": [
        
          "PhoneType": "LANDLINE",
          "PhoneNumber": "8085063644",
          "IsPrimaryPhone": true
        
      ]
    ,
    
      "PersonalId": "1006",
      "ApplicantPhone": [
        
          "PhoneType": "LANDLINE",
          "PhoneNumber": "9643645364",
          "IsPrimaryPhone": true
        ,
        
          "PhoneType": "HOME",
          "PhoneNumber": "987654321",
          "IsPrimaryPhone": false
        
      ]
    
  ]

我想获取电话类型为固定电话的人的电话号码。 该怎么做?

我试过这种方法:

#find phoneNumber when phoneType='LANDLINE'

SELECT 
    @path_to_name := json_unquote(json_search(applicationData, 'one', 'LANDLINE')) AS path_to_name,
    @path_to_parent := trim(TRAILING '.PhoneType' from @path_to_name) AS path_to_parent,
    @event_object := json_extract(applicationData, @path_to_parent) as event_object,
    json_unquote(json_extract(@event_object, '$.PhoneNumber')) as PhoneNumber
FROM application;

问题在于我使用的是“一个”,所以我能够取得结果,但在我的 json 中,我有 2 个人的类型为固定电话。 使用 json 搜索,我得到了值数组,但我无法决定如何以可以提取路径的方式提取这些数组行值。

SELECT 
    @path_to_name := json_unquote(json_search(applicationData, 'all', 'LANDLINE')) from application;

结果:

as you can see at 3rd and 4th row i am getting 2 data as an array.

如何存储这些数据以获得适当的结果?

我还尝试了另一个查询,但无法检索数据数组的结果。

我不能使用存储过程,我必须使用 mysql 工作台。

请注意,我比较新鲜,所以我不知道如何针对更复杂的查询使用此解决方案,在这些查询中我可能需要检索类型为固定电话的人的 id(单个数组中的多人)。

【问题讨论】:

【参考方案1】:
SELECT test.id, jsontable.*
FROM test
CROSS JOIN JSON_TABLE(test.data,
                      '$.PersonApplicant[*]'
                        COLUMNS ( PersonalId INT PATH '$.PersonalId',
                                  PhoneType VARCHAR(255) PATH '$.ApplicantPhone[0].PhoneType',
                                  PhoneNumber VARCHAR(255) PATH '$.ApplicantPhone[0].PhoneNumber')) jsontable
WHERE jsontable.PhoneType = 'LANDLINE';

https://dbfiddle.uk/?rdbms=mysql_8.0&fiddle=4089207ccfba5068a48e06b52865e759

【讨论】:

以上是关于使用 mysql 工作台查询 mysql json 数组的主要内容,如果未能解决你的问题,请参考以下文章

如何在 laravel 中执行复杂的 mysql 查询

Laravel 使用相等运算符查询 MySQL JSON 列

如何使用 AND 查询 MYSQL 中的 JSON 数组

无法使用 MySQL 在烧瓶中执行查询

mysql json字符串查询

如何使用 MySQL 查询 json 数组