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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 02:57:05