У меня есть таблица 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 данной проблемы нет.Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Для изображенной схемы БД необходимо составить запрос, который вернет список всех счетовДля каждого счета выбрать поля номер счета, дата...
Пытаюсь сделать парсер сайта SoundCloud на pythonПри попытке получить код страницы, что через requests, что через Selenium html-код страницы выдается некорректным
Есть лого и 2 текстаНужно, чтобы они были в одном диве, но лого всегда улетает вниз