如何编写SQL查询筛选check_list列含machine_id=12的jobs表行
SQL查询:筛选JSON数组中包含指定machine_id的行
针对你的场景——jobs表的check_list列(varchar(max)类型,存储JSON数据),要筛选出items数组中存在machine_id = 12的数据行,以下是可靠的SQL解法(以SQL Server为例):
SELECT * FROM jobs WHERE EXISTS ( SELECT 1 FROM OPENJSON(jobs.check_list, '$.items') WITH ( machine_id INT '$.machine_id' ) AS parsed_items WHERE parsed_items.machine_id = 12 )
说明:
OPENJSON(jobs.check_list, '$.items'):将check_list字段里的itemsJSON数组解析为关系型行集WITH子句:定义要从每个数组元素中提取的字段,这里指定提取machine_id(映射为INT类型,对应JSON路径$.machine_id)EXISTS子查询:判断当前行的JSON数组中是否存在符合machine_id = 12的元素,存在则保留该行
不推荐的写法(谨慎使用):
如果临时应急,也可以用字符串匹配,但这种方法依赖JSON的格式(比如键的拼写、空格位置),容易出现误判:
SELECT * FROM jobs WHERE check_list LIKE '%machine_id":12%'
内容的提问来源于stack exchange,提问作者nokiko
相关产品推荐
相关产品推荐

