Mysql JSON_EXTRACT игнорирует некоторые поля при выполнении «не совпадающих» запросов - PullRequest
0 голосов
/ 18 января 2019

У меня возникли проблемы при выполнении некоторых запросов select JSON_EXTRACT для данных JSON, хранящихся в базе данных Mysql.

Каждая строка не имеет одинаковую структуру данных JSON. Все идет хорошо, когда я использую JSON_EXTRACT для выбора полей, соответствующих условию.

Проблема заключается в попытке выбрать поля, не соответствующие условию. Только поля, которые имеют ключ (хотя, конечно, не совпадают с данными), возвращаются.

Здесь вы найдете скрипку , которая воспроизводит это поведение.

Я думаю, что это целенаправленная вещь, но мне интересно, есть ли обходной путь, который может привести к четвертому результату запроса скрипты без добавления другого условия (в реальном случае запросы генерируются программно на основе определенного синтаксиса API и добавления контекстные условия будут больно)?

1 Ответ

0 голосов
/ 18 января 2019

Одним из способов решения этой проблемы является выбор идентификаторов, которые соответствуют выражению, а затем используйте их в выражении IN или NOT IN в зависимости от того, хотите ли вы проверить на совпадение или несоответствие, например,

SELECT *
FROM `test`
WHERE id IN (SELECT id
             FROM `test` 
             WHERE data->>'$.test' = 'passed');

или

SELECT *
FROM `test`
WHERE id NOT IN (SELECT id
                 FROM `test` 
                 WHERE data->>'$.test' = 'passed');

Единственное отличие в запросах заключается в добавлении слова NOT для отмены совпадения.

Демо

...