我有这个正在运行的查询:
select * from housedata where JSON_EXTRACT(properties->"$.Type", '$[0]') in ('House', 'Flat');
但是,在某些行中,Type json 数组中有多个项目,我不想像上面的示例那样只使用第一个项目。
假设它是 ["House", "Flat"] 我想匹配查询,而且当它是 ["House", "Tent"] 作为“In”列表中的项目之一时也匹配。< /p>
这可以在查询中实现吗?我试图找到它,但我一直在寻找在 JSON 数组本身中查找某些内容的示例,但这不是我要寻找的。p>
P粉3739908572024-04-05 09:39:35
是的,这有效(在 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');