Как удалить элемент из массива MySQL JSON внутри объекта? - PullRequest
0 голосов
/ 29 мая 2020

У меня есть таблица mysql «tbl1» с полем JSON «числа», содержащим такие значения:

{«начало»: [«101», «102», «104» ], «final»: [«102», «105», «106»]}

Как я могу обновить «numbers», чтобы удалить определенный элемент c (например, «102») из «start» "и" финал "?

Я знаю, что мне нужно использовать комбинацию JSON_REMOVE и JSON_SEARCH, но я не нахожу решения.

1 Ответ

0 голосов
/ 29 мая 2020
WITH RECURSIVE
cte AS ( SELECT JSON_REMOVE(json_field, JSON_UNQUOTE(JSON_SEARCH(json_field, 'one', '102'))) json_field
         FROM source_table
         UNION ALL
         SELECT JSON_REMOVE(json_field, JSON_UNQUOTE(JSON_SEARCH(json_field, 'one', '102'))) json_field
         FROM cte
         WHERE JSON_SEARCH(json_field, 'one', '102') )
SELECT json_field
FROM cte
WHERE JSON_SEARCH(json_field, 'one', '102') IS NULL;

и соответственно

UPDATE source_table
JOIN (  WITH RECURSIVE
        cte AS ( SELECT id, JSON_REMOVE(json_field, JSON_UNQUOTE(JSON_SEARCH(json_field, 'one', '102'))) json_field
                 FROM source_table
                 UNION ALL
                 SELECT id, JSON_REMOVE(json_field, JSON_UNQUOTE(JSON_SEARCH(json_field, 'one', '102'))) json_field
                 FROM cte
                 WHERE JSON_SEARCH(json_field, 'one', '102') )
        SELECT id, json_field
        FROM cte
        WHERE JSON_SEARCH(json_field, 'one', '102') IS NULL
     ) processed USING (id)
SET source_table.json_field = processed.json_field;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...