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

如何在SQL存储过程中整合Skills表数据生成指定结构结果

整合Skills表数据到存储过程并生成目标JSON格式

嘿,我懂你想要生成包含嵌套技能数组的JSON数据对吧?咱们可以通过调整SQL查询,结合FOR JSON语法来实现你要的结构。首先得纠正下你示例JSON里的小问题——同一个对象里不能有重复的SkillDesc键,正确的格式应该是把Skills做成一个数组,比如"Skills": [{"SkillDesc": "iOS"}, {"SkillDesc": "Android"}]。

假设你的Skills表包含UserID(关联用户表的主键)和SkillDesc(技能描述)这两个核心字段,下面是调整后的存储过程查询语句:

SELECT
    users.UserID,
    users.UserName,
    users.Password, -- 注意:实际生产环境不要返回明文密码,这是严重的安全风险!
    users.Email_ID,
    users.UserProfileImageURL,
    -- 子查询获取当前用户的所有技能,生成JSON数组
    (
        SELECT SkillDesc
        FROM Skills
        WHERE UserID = users.UserID
        FOR JSON PATH
    ) AS Skills,
    profiles.Details,
    profiles.Experiance,
    profiles.HoursCompleated,
    profiles.RatePerHour,
    profiles.SubTitle,
    profiles.TotalEarning
FROM Users users
LEFT JOIN profile profiles ON users.UserID = profiles.UserID
WHERE users.UserType = 'Coach' AND users.UserID = 1
-- 生成最终的单个JSON对象,而非数组;保留空值字段
FOR JSON PATH, INCLUDE_NULL_VALUES, WITHOUT_ARRAY_WRAPPER;

关键部分解释:

  • 子查询生成Skills数组:通过嵌套的SELECT ... FOR JSON PATH,把当前用户的所有技能转换成一个JSON数组,直接映射到结果的Skills字段中。
  • WITHOUT_ARRAY_WRAPPER:因为你查询的是单个用户(UserID=1),用这个选项可以让结果返回单个JSON对象,而不是包裹在数组里。
  • INCLUDE_NULL_VALUES:确保如果用户没有任何技能,Skills字段会显示为[](空数组)而不是被省略。

如果你的Skills表结构和我假设的不一样(比如有其他字段需要返回),只需要调整子查询里的字段即可。另外再强调下,返回明文密码是非常不安全的做法,建议在实际场景中移除这个字段或者做加密处理。

内容的提问来源于stack exchange,提问作者Amandeep Singh

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.11 09:24:33