如何查询含对象数组字段的SQL表?WHERE条件写法求教
查询存储对象数组的字段中满足条件的数据
这完全可行,但不能用你尝试的那种写法——你写的table_1.a是直接访问表的列,而不是数组里对象的字段,得根据你使用的数据库,用对应的JSON数组查询语法:
不同数据库的写法示例
假设存储对象数组的字段名叫json_array_col,要筛选数组内存在a字段等于"test"的记录:
MySQL 5.7+ / MariaDB
用JSON_CONTAINS函数直接匹配数组内的对象:
SELECT * FROM table_1 WHERE JSON_CONTAINS(json_array_col, '{"a": "test"}');
或者用JSON_SEARCH定位是否存在目标值:
SELECT * FROM table_1 WHERE JSON_SEARCH(json_array_col, 'one', 'test', NULL, '$[*].a') IS NOT NULL;
PostgreSQL
如果字段是jsonb类型,两种常用写法:
- 展开数组后筛选(适合复杂条件):
SELECT DISTINCT table_1.* FROM table_1 JOIN LATERAL jsonb_array_elements(table_1.json_array_col) AS elem ON elem->>'a' = 'test';
- 用
@>包含操作符快速匹配:
SELECT * FROM table_1 WHERE json_array_col @> '[{"a": "test"}]'::jsonb;
MongoDB
直接通过内嵌数组的字段路径查询:
db.table_1.find({ "json_array_col.a": "test" })
内容的提问来源于stack exchange,提问作者Gelo Chang
相关产品推荐
相关产品推荐

