#mysql #sql #json #mariadb
#mysql #sql #json #мариадб
Вопрос:
У меня есть команда:
SELECT JSON_MERGE_PATCH ('{"variable": "1", "variable": "2", "anothervariable": "another"}', '{"variable": "3"}')
Однако этот запрос генерирует результат:
{"variable": "3", "variable": "3", "anothervariable": "another"}
Мне нужен результат без дубликатов:
{"variable": "3", "anothervariable": "another"}
Как это можно было бы устроить, пожалуйста?
На скрипке: https://dbfiddle.uk/?rdbms=mariadb_10.5amp;fiddle=57b13797114fecc96aa2b24b5f5e02d4
Как можно было бы организовать результат без дублирования? Порядок JSON в запросе не может быть изменен.
Спасибо за совет.
Комментарии:
1. Попробуйте dbfiddle .
Ответ №1:
SELECT JSON_MERGE_PATCH ('{"variable": "3"}', '{"variable": "1", "variable": "2", "anothervariable": "another"}')
Комментарии:
1. Привет, спасибо, но не работает. Этот запрос возвращает неверный результат: «{«переменная»: «1», «anothervariable»: «другой»}» Но мне нужно получить результат: «{«переменная»: «3», «anothervariable»: «другой»}»
2. Пожалуйста, добавьте некоторые пояснения к вашему ответу, чтобы другие могли извлечь из него уроки
3. Пожалуйста, добавьте некоторые пояснения.
4. Порядок JSON в запросе не может быть изменен. Дело в том, что это решение перезаписывает неправильное значение переменной. переменная = 1, но мне нужно значение с наивысшим приоритетом = 3. Поменяв местами JSON в запросе, пользователь изменил приоритет переменных. JSON, который находится в конце, имеет более высокий приоритет при merge_patch. Поэтому мне нужно решение, которое действительно решит проблему так, чтобы возвращалась переменная = 3.
5. В JSON нет никакого порядка. Это случайный порядок, в котором появляются элементы внутри. Так что у вас не будет шанса каждый раз получать правильный вариант. Даже если вы найдете способ заставить его работать на вашем компьютере, на другом компьютере с другим декодером JSON он может выглядеть совершенно по-другому. Сделайте свой JSN действительным там, где вы его создаете, не пытайтесь исправлять ошибки, сделанные ранее