我可以将 json 数组字段与 IN 子句结合使用吗
P粉066224086
P粉066224086 2024-04-04 10:51:09
[MySQL讨论组]

我有这个正在运行的查询:

select * 
from housedata 
where JSON_EXTRACT(properties->"$.Type", '$[0]') in ('House', 'Flat');

但是,在某些行中,Type json 数组中有多个项目,我不想像上面的示例那样只使用第一个项目。

假设它是 ["House", "Flat"] 我想匹配查询,而且当它是 ["House", "Tent"] 作为“In”列表中的项目之一时也匹配。< /p>

这可以在查询中实现吗?我试图找到它,但我一直在寻找在 JSON 数组本身中查找某些内容的示例,但这不是我要寻找的。

P粉066224086
P粉066224086

全部回复(1)
P粉373990857

是的,这有效(在 MySQL 8.0.32 中测试):

select json_extract(properties->'$.Type', '$[0]') IN ('House', 'Flat') as result 
from housedata;
+--------+
| result |
+--------+
|      1 |
+--------+

如果您想测试 JSON 数组中与值列表之一匹配的任何值,请使用 JSON_OVERLAPS():

select true from housedata
where json_overlaps(properties->'$.Type',
  cast('["House","Flat"]' as json));
+------+
| true |
+------+
|    1 |
+------+

当然,如果您不使用 JSON 作为多值属性,而是使用依赖表并每行存储一个值,那么这会简单得多。

select ...
from housedata join housedata_type using (house_id)
where housedata_type.type in ('House', 'Flat');
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号