Выберите объекты из массива объектов, которые соответствуют свойству в MYSQL JSON

0

У меня есть таблица с 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-json

1 ответ

0

Если вы используете 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 можно найти здесь

Ещё вопросы

Сообщество Overcoder
Наверх
Меню