У меня есть таблица test, в которой есть поле json с форматом данных JSON.
В этом поле лежит массив [2, 3, 4, 5].
Я хочу удалить из массива троечку. И успешно делаю это следующим запросом:
UPDATE test SET json = JSON_REMOVE(json, '$[1]') WHERE `id` = 2;
Но что, если я знаю, что в массиве есть элемент со значением 3, но не знаю его индекса?
Пытаюсь выполнить следующий запрос:
UPDATE test SET json = JSON_REMOVE(
json,
'$[
JSON_SEARCH(json, 'one', 3)
]'
) WHERE `id` = 2;
Получаю ошибку синтаксиса.
Что я делаю не так?
Что я делаю не так?
Скобок и кавычек настолько много, что запрос потерял смысл; надо быть проще:
UPDATE test
SET json = JSON_REMOVE(json, JSON_UNQUOTE(JSON_SEARCH(json, 'one', 3)))
WHERE `id` = 2;
А если говорить более формально, то JSON_SEARCH () и так возвращает путь, так что не нужно никаких дополнительной обработки значения прежде чем передать его JSON_REMOVE ().
Замечания:
JSON_SEARCH () возвращает ответ как json-документ — строку в кавычках, поэтому можно использовать JSON_UNQUOTE, чтобы из убрать.JSON_SEARCH () не может искать не-строковые значения — это очевидный баг, хотя некоторые считают, что его просто надо задокументировать; в MariaDB данной проблемы нет.Сборка персонального компьютера от Artline: умный выбор для современных пользователей