Из таблицы со столбцом с массивом словарей json мне нужно извлечь все значения ключа «user_id» по одному на строку. Если нулевой или пустой массив возвращает NULL. Подобно методу взрыва панд Python.
Длина массива неизвестна.
Исходная таблица:
| id | users |
|----|-----------------------------------------------------------------|
| 1 |[{"id": 2, "mail": "[email protected]"}, {"id": 3, "mail": "[email protected]"}] |
| 2 |[{"id": 5, "email": "[email protected]"}]" |
| 3 | []
|
Обработанная таблица:
| id | users |
|----|----------|
| 1 | 2 |
| 1 | 3 |
| 2 | 5 |
| 3 | NULL |
select id, j.user_id from mytable left outer join
json_table(users, '$[*]' columns (user_id int path '$.user_id')) as j on true;
+------+---------+
| id | user_id |
+------+---------+
| 1 | 2 |
| 1 | 3 |
| 2 | 5 |
| 3 | NULL |
+------+---------+
Прочтите https://dev.mysql.com/doc/refman/8.0/en/json-table-functions.html для получения дополнительной информации о функции JSON_TABLE().
Спасибо @BillKarwin за ваш ответ. Вы редактируете быстрее, чем я редактирую, можете ли вы отредактировать свой ответ, теперь я правильно отформатировал вопрос?