-- 要查找的值 SET @valueMapping = 17; -- 表字段:id, config -- config字段格式: /* { "fieldModels": [{ "key": 0, "guid": "1", "field": "Id", "dataType": 1, "showName": "标识", "textFormat": "", "valueMapping": 17 }, { "key": 1, "guid": "2", "field": "orderid", "dataType": 0, "showName": "orderid", "textFormat": "", "valueMapping": -1 } } */ -- 需求:查找 config JSON字段(对象类型)中 fieldModels(数组类型)数组字段中 valueMapping(整形)值等于 17 的记录 -- 1、先提取 config JSON 字段中 fieldModels 属性,得到数组 SELECT JSON_EXTRACT(`config`,'$.fieldModels') fieldModels FROM `sql_model`; -- 2、再从 fieldModels 数组中查找 valueMapping 的值是否等于查找的值,返回 1 或 0,表示是否已找到 SELECT JSON_CONTAINS(JSON_EXTRACT(`config`,'$.fieldModels'), JSON_OBJECT('valueMapping', @valueMapping)) 是否已找到 FROM `sql_model`; -- 最后匹配结果 SELECT id, config FROM `sql_model` WHERE JSON_CONTAINS(JSON_EXTRACT(`config`,'$.fieldModels'), JSON_OBJECT('valueMapping', @valueMapping)) > 0;