Mysql: где in не возвращает строк при использовании с json_extract

Меня несколько озадачивают следующие простые утверждения.

create table Test(id integer, data json);
insert into Test(id, data) values(1, '{"name": "vova"}');

select * from Test
where  json_extract(data, "$.name") IN ("vova", "mark");

Здесь select ничего не возвращает. Однако запрос возвращает ожидаемую строку, если я оставлю один элемент в массиве:

select * from Test
where  json_extract(data, "$.name") IN ("vova");

'json_extract' и 'where in' не нравятся друг другу? Или я, наверное, что-то упускаю?

Вот ссылка с примером. Поведение такое же, когда я запускаю запросы локально.


person StackExploded    schedule 19.12.2019    source источник
comment
учитесь здесь, вы что-то упускаете database.guide /   -  person Ericgit    schedule 19.12.2019


Ответы (1)


если вы попытаетесь оценить

json_extract(data, "$.name")

-> это приведет к "vova"

значение с двойными кавычками, обработайте свой оператор IN для этого сценария, чтобы выбрать строковые значения, добавьте одинарные кавычки.

select * from Test
where  json_extract(data, "$.name") IN ('"vova"', '"mark"');
person Ed Bangga    schedule 19.12.2019
comment
оо, да, конечно... Интересно, почему он правильно соответствует/не соответствует, если есть один элемент - person StackExploded; 19.12.2019