У меня есть таблица, подобная следующей:
CREATE TABLE `foo` (
`foo_id` bigint(20) NOT NULL AUTO_INCREMENT,
`data` json DEFAULT NULL,
`data_type` int(11) NOT NULL,
`data_status` int(11) NOT NULL,
PRIMARY KEY (`foo_id`)
);
вставить некоторые данные
insert into foo(data, data_type, data_status) values ('{\"id\": \"FOO\", \"code\": \"FOO\"}', 1, 1);
insert into foo(data, data_type, data_status) values ('{\"id\": \"BAR\", \"code\": \"BAR\"}', 1, 1);
insert into foo(data, data_type, data_status) values ('{\"id\": \"BAZ\", \"code\": \"BAZ\"}', 1, 1);
показать содержимое таблицы:
mysql> select * from foo;
+--------+------------------------------+-----------+-------------+
| foo_id | data | data_type | data_status |
+--------+------------------------------+-----------+-------------+
| 1 | {"id": "FOO", "code": "FOO"} | 1 | 1 |
| 2 | {"id": "BAR", "code": "BAR"} | 1 | 1 |
| 3 | {"id": "BAZ", "code": "BAZ"} | 1 | 1 |
+--------+------------------------------+-----------+-------------+
3 rows in set (0.01 sec)
Этот запрос работает:
select f.data, f.data_type, f.data_status
from foo f
where (JSON_EXTRACT(f.data, '$.code') in ('FOO'))
and (f.data_type in (1))
and (f.data_status in (1));
+------------------------------+-----------+-------------+
| data | data_type | data_status |
+------------------------------+-----------+-------------+
| {"id": "FOO", "code": "FOO"} | 1 | 1 |
+------------------------------+-----------+-------------+
1 row in set (0.00 sec)
Это тоже:
select f.data, f.data_type, f.data_status
from foo f
where (JSON_EXTRACT(f.data, '$.code') in ('BAR'))
and (f.data_type in (1))
and (f.data_status in (1));
+------------------------------+-----------+-------------+
| data | data_type | data_status |
+------------------------------+-----------+-------------+
| {"id": "BAR", "code": "BAR"} | 1 | 1 |
+------------------------------+-----------+-------------+
Однако это не так ...
select f.data, f.data_type, f.data_status
from foo f
where (JSON_EXTRACT(f.data, '$.code') in ('FOO','BAR'))
and (f.data_type in (1))
and (f.data_status in (1));
Empty set, 1 warning (0.00 sec)
Как заставить работать третий запрос?