我有一个MySQL5.7表,如下所示:Id|meta
1|空2|{“grant_ids”:[5,7]}我想查询META->GRANT_ID中值为5的行。我试过了
select * from content.banners where meta->>"$.grant_ids" in (5);
但这不管用。我不认为in是受支持的,但是你知道如何实现这个查询吗?
in
toiithl61#
mysql> create table table_that_looks_like_this ( id int primary key, meta json); mysql> insert into table_that_looks_like_this values -> (1, null), -> (2, '{"grant_ids": [5, 7]}'), -> (3, '{"grant_ids": [4, 8]}'), -> (4, '{"no_grant_ids": [5, 7]}'); mysql> select * from table_that_looks_like_this where json_contains(meta, '[5]', '$.grant_ids'); +----+-----------------------+ | id | meta | +----+-----------------------+ | 2 | {"grant_ids": [5, 7]} | +----+-----------------------+
DBFiddleJSON_EXTRACT()将只返回您给出的路径上的JSON数组,并且数组不是标量值5。用->>操作符取消对JSON数组的引用没有任何效果;“未加引号的”JSON数组是完全相同的数组。
->>
kse8i1jr2#
您可以这样编写它,使用SQL的json函数。
SELECT*FROM CONTENT.BANNERS b WHERE JSON_EXTRACT(b.meta,“$.grant_ids”)in(5)
2条答案
按热度按时间toiithl61#
DBFiddle
JSON_EXTRACT()将只返回您给出的路径上的JSON数组,并且数组不是标量值5。用
->>
操作符取消对JSON数组的引用没有任何效果;“未加引号的”JSON数组是完全相同的数组。kse8i1jr2#
您可以这样编写它,使用SQL的json函数。
SELECT*FROM CONTENT.BANNERS b WHERE JSON_EXTRACT(b.meta,“$.grant_ids”)in(5)