SQL如何引用已有行数据生成多行新记录,关联数学教师与所有数学班
你遇到的报错是因为SELECT子句中的标量子查询无法返回多行结果,当匹配到数学科目时,子查询返回了3个数学老师,和单行输出的逻辑冲突,所以触发错误。
可行解决方案
使用UNION ALL拼接两部分数据即可实现需求:
-- 第一部分:保留所有非数学科目的原有记录 SELECT class, teacher, subject FROM TeachingSets WHERE subject != 'Maths' UNION ALL -- 第二部分:所有数学班级关联所有数学老师 SELECT c.class, t.teacher, 'Maths' AS subject FROM (SELECT DISTINCT class FROM TeachingSets WHERE subject = 'Maths') c CROSS JOIN (SELECT DISTINCT teacher FROM TeachingSets WHERE subject = 'Maths') t
逻辑说明
- 第一部分直接过滤出非数学科目的记录,完全保留原有数据
- 第二部分先单独取出所有开设了数学科目的班级、所有教数学的老师,通过交叉连接(笛卡尔积)实现每个数学班和所有数学老师的关联,固定科目为数学
- 用
UNION ALL拼接两部分结果,不需要去重,执行效率更高
运行上述SQL即可得到你期望的输出结果。
内容的提问来源于stack exchange,提问作者Rob
相关产品推荐
相关产品推荐

