使用 mysql workbench 查询 mysql json 数组
Querying on mysql json array using mysql workbench
这是我的 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
}
]
}
]
}
我想联系 phone 没有 phone 打固定电话的人。
怎么做?
我试过这种方法:
#在phone类型='LANDLINE'
时找到phone数字
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;
这个问题是我使用的是 'one',所以我能够取得结果,但是在我的 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 workbench。
请注意,我比较新鲜,所以我不知道如何针对更复杂的查询来处理此解决方案,在这些查询中,我可能必须检索类型为固定电话(单个数组中的多个人)的人的 ID。
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
这是我的 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
}
]
}
]
}
我想联系 phone 没有 phone 打固定电话的人。 怎么做?
我试过这种方法:
#在phone类型='LANDLINE'
时找到phone数字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;
这个问题是我使用的是 'one',所以我能够取得结果,但是在我的 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 workbench。
请注意,我比较新鲜,所以我不知道如何针对更复杂的查询来处理此解决方案,在这些查询中,我可能必须检索类型为固定电话(单个数组中的多个人)的人的 ID。
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