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

请求编写SQL行转列查询:关联多表获取学生及父母信息

没问题,我来帮你搞定这个行转列的SQL查询需求~先理清楚我们的数据源和最终要输出的结果,再给出具体的语句和解释。

数据源表结构及数据

Parent表

idfirstname
1abc
2bcd
3cde

StudentRelationship表

relationparentidstudentid
father1s0001
mother2s0001
father3s0002

STUDENT表

idfirstnamelastnameaddresssex
s0001shdjkhbjxxmale

实现需求的SQL语句

SELECT
    s.id AS studentid,
    CONCAT(s.firstname, ' ', s.lastname) AS name,
    MAX(CASE WHEN sr.relation = 'father' THEN p.firstname END) AS `father name`,
    MAX(CASE WHEN sr.relation = 'mother' THEN p.firstname END) AS `mother name`,
    s.sex,
    s.address
FROM STUDENT s
LEFT JOIN StudentRelationship sr ON s.id = sr.studentid
LEFT JOIN Parent p ON sr.parentid = p.id
GROUP BY s.id, s.firstname, s.lastname, s.sex, s.address;

语句解释

  • 用LEFT JOIN关联三张表:这样即使学生没有对应的父亲/母亲记录(比如s0002没有母亲数据),也能保留对应行(空值填充);如果只需要查询有完整学生信息的记录,可以把LEFT JOIN改成INNER JOIN。
  • 行转列核心:通过CASE WHEN判断亲属关系,配合MAX()聚合函数提取对应父母的名字——聚合函数用来消除分组后产生的空值,确保每个学生只有一行结果。
  • CONCAT()函数用来拼接学生的名和姓,生成name字段。
  • 最后按学生的唯一标识(s.id)以及其他非聚合字段分组,保证结果的正确性。

查询结果示例

studentidnamefather namemother namesexaddress
s0001shdj khbabcbcdmalejxx
s0002(null)cde(null)(null)(null)

内容的提问来源于stack exchange,提问作者Renuka Chauhan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 04:39:24