我需要帮助来创建一个复杂的 mySql 查询,其中涉及 3 个表之间的 JSON 和 JOIN 语句

问题描述 投票:0回答:1

这些是我的桌子:
同学们

学生证 名字
xk341 XeraKay
kj403 凯文乔

条款

学生证 术语 开始日期 结束日期
xk341 2019 1 2019-09-01 2019-12-24
xk341 2019 2 2019-01-01 2019-03-05
xk341 2022 4 2022-05-01 2022-08-28
kj403 2022 4 2022-05-01 2022-08-28

课程

学生证 术语 课程代码 年级
xk341 2019 1 198:033:111 'B'
xk341 2019 1 198:033:124 'A'
xk341 2019 2 350:043:323 'W'
xk341 2022 4 750:452:256 'B+'
kj403 2022 4 750:452:256 'C'

我尝试使用 JSON_OBJECT、JSON_ARRAY、JOIN、GROUP BY 的不同组合,但无法产生我想要的结果。 我希望我的结果是一个 JSON_OBJECT,看起来像这样,具有基于 studentID、year、term、course:

的嵌套结构
{
  "studentResults": [
    {"xk341": {
        "name": "XeraKay",
        "years": [
          {"2019": [
              {"1": {
                  "startDate": "2019-09-01",
                  "endDate": "2019-12-24",
                  "courses": [
                    {"courseCode": "198:033:111",
                      "grade": "B"
                    },
                    {"courseCode": "198:033:124",
                      "grade": "A"
                    }
                  ]}
              },
              {"2": {
                  "startDate": "2019-01-01",
                  "endDate": "2019-03-05",
                  "courses": [
                    {"courseCode": "350:043:323",
                      "grade": "W"
                    }
                  ]}
              }
            ]},
          {"2022": [
              {"4": {
                  "startDate": "2022-05-01",
                  "endDate": "2022-08-28",
                  "courses": [
                    {"courseCode": "750:452:256",
                      "grade": "B+"
                    }
                  ]
                }}
            ]}
        ]}
    },
    {"kj403": {
        "name": "KevinJo",
        "years": [
          {"2022": [
              {"4": {
                  "startDate": "2022-05-01",
                  "endDate": "2022-08-28",
                  "courses": [
                    {"courseCode": "750:452:256",
                      "grade": "C"
                    }
                  ]}}
            ]}
        ]}
    }]
}

我尝试过很多事情, 我最接近的是:

SELECT DISTINCT JSON_OBJECT(
t.year, JSON_ARRAY(
JSON_OBJECT(t.term, JSON_ARRAY( (select DISTINCT GROUP_CONCAT(
                    JSON_OBJECT(
                    'courseCode',c.courseCode
                    ))
                    FROM Courses c WHERE c.term = t.term and c.studentID = t.studentID)) )
)            )       
from Terms t, Courses c WHERE t.term = c.term AND t.studentID = c.studentID AND t.studentID in ('xk341','kj403')
GROUP BY t.term
;

这是我针对不同数据运行的结果,术语 2,3 没有在同一个 2014 年连接在一起

{
"2014": \[
{
"2": \[
"{"courseCode": "16:185:419"},{ "courseCode": "11:175:543"},{"courseCode": "21:940:365"},{ "courseCode": "16:198:501"}"
\]
}
\]
}
{
"2014": \[
{
"3": \[
"{"courseCode": "19:165:611"},{"courseCode": "03:709:257"},{"courseCode": "04:486:627"},{ "courseCode": "09:790:671"},{"courseCode": "09:920:272"}"
\]
}
\]
}
mysql database
1个回答
0
投票

看起来 ChatGPT-4o 能够提出一个可以做到这一点的查询!

© www.soinside.com 2019 - 2024. All rights reserved.