У меня есть таблица с 1 столбцом столбца типа JSON в базе данных MySQL, в которой хранится массив 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 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 Table можно найти здесь