Mysql JSON_EXTRACT игнорирует некоторые поля при выполнении "не совпадающих" запросов

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

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

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

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

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

1 ответ

Решение

Одним из способов решения этой проблемы является выбор идентификаторов, которые соответствуют выражению, а затем использовать их в 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 чтобы отменить матч.

демонстрация

Другие вопросы по тегам