如何从SQL数据库JSON列查询指定student_id的数据并展示
针对JSON数组的正确查询语句
你的student_no列存储的是JSON数组,不是单个JSON对象,直接用student_no.student_id会因为语法不匹配报错。需要先将数组拆分为单个JSON元素,再筛选student_id=1002的记录,以下是主流数据库的实现方式:
MySQL 5.7+/8.0+
使用JSON_TABLE将JSON数组转换为关系表结构后筛选:
SELECT j.First_name, j.Last_name FROM your_table_name, JSON_TABLE( student_no, '$[*]' COLUMNS( First_name VARCHAR(50) PATH '$.First_name', Last_name VARCHAR(50) PATH '$.Last_name', student_id INT PATH '$.student_id' ) ) AS j WHERE j.student_id = 1002;
PostgreSQL
使用jsonb_array_elements(或json_array_elements,对应JSON类型)拆分数组,再提取字段筛选:
SELECT (j->>'First_name') AS First_name, (j->>'Last_name') AS Last_name FROM your_table_name, jsonb_array_elements(student_no::jsonb) AS j WHERE (j->>'student_id')::int = 1002;
注:如果列类型是json而非jsonb,将jsonb_array_elements替换为json_array_elements即可。
SQL Server
使用OPENJSON解析JSON数组并映射为列,再筛选:
SELECT First_name, Last_name FROM your_table_name CROSS APPLY OPENJSON(student_no) WITH ( First_name VARCHAR(50) '$.First_name', Last_name VARCHAR(50) '$.Last_name', student_id INT '$.student_id' ) AS j WHERE j.student_id = 1002;
注意事项
- 替换语句中的
your_table_name为实际的表名 - 确保数据库版本支持对应的JSON函数(如MySQL需5.7及以上版本)
- 若存储的是标准JSON格式,键名应使用双引号,多数数据库也兼容示例中的单引号格式
内容的提问来源于stack exchange,提问作者user21255925
相关产品推荐
相关产品推荐

