步骤一:创建表格
首先,我们需要创建一个表格来存储包含JSON对象数组的数据。可以使用以下代码创建一个名为 my_table 的表格:
CREATE TABLE my_table (
id INT PRIMARY KEY AUTO_INCREMENT,
json_data JSON
);
上述代码创建了一个包含两个列的表格,id 和 json_data。其中,json_data 列用于存储我们要查询的JSON数据。
步骤二:插入JSON数据
接下来,我们需要插入一些包含JSON对象数组的数据。可以使用以下代码插入一条数据:
INSERT INTO my_table (json_data)
VALUES ('[{"name": "Alice", "age": 25}, {"name": "Bob", "age": 30}, {"name": "Charlie", "age": 35}]');
上述代码向 my_table 表格中插入了一个包含三个JSON对象的JSON数组。你可以根据需要插入更多的数据。
步骤三:查询包含特定条件的JSON对象数组
现在,我们已经准备好进行查询了。使用以下代码查询包含特定条件的JSON对象数组:
SELECT * FROM my_table
WHERE JSON_CONTAINS(json_data, '{"name": "Alice"}');
上述代码使用JSON_CONTAINS函数查询包含 {"name": "Alice"} 条件的JSON对象数组。如果该条件存在于JSON数组中的任意一个对象中,则会返回匹配的记录。
更为复杂的场景
有时候在开发比较简单的项目时,为了方便(偷懒)会将所有关联信息以json格式保存在主表里,在新增的时候是轻松了,不用插入多张表,但是在查询的时候如果对json格式掌握不足就会给自己挖坑
假设json字段inventor的内容为
[{"name": "", "type": "1", "number": "30276207", "company": [103], "hasName": true, "employeeId": 1}, {"name": "", "type": "1", "number": "11725165", "company": [128], "hasName": true, "employeeId": 5}]
查询 employeeId=1 的数据
select * from biz_patent where JSON_CONTAINS(inventor, '{"employeeId": 1}');
select * from biz_patent where JSON_CONTAINS(inventor, CONCAT('{"employeeId": ', 3 , '}'));
查询 employeeId=1,并将所有人员姓名展示在一个字段中 的数据
分解下, 1:使用JSON_EXTRACT函数来提取JSON对象数组中的字段所有值
SELECT JSON_UNQUOTE(JSON_EXTRACT(inventor, '$[*].employeeId')) AS names from biz_patent;
再用 FIND_IN_SET 查询
select a.id,a.patent_type,a.patent_name,
(SELECT GROUP_CONCAT(DISTINCT name) FROM biz_employee WHERE FIND_IN_SET(id, REPLACE(TRIM(REGEXP_REPLACE(JSON_UNQUOTE(JSON_EXTRACT(a.inventor, '$[*].employeeId')), '\\[|\\]', '')) ,' ','')) ) as inventor,
a.patent_application_date
from biz_patent a
where JSON_CONTAINS(inventor, CONCAT('{"employeeId": ', 3 , '}'));