You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.30 20:06:29