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

请求协助编写关联三张表的SQL查询语句

解决多表关联SQL查询的问题

看起来你在处理三张表(teacher、teaches,以及关联的course/student)的关联查询时卡住了,别担心,咱们一步步拆解问题,先把基础逻辑理清楚。

首先,根据你给出的外键引用,我先补全teaches表的完整定义(推测你没写完的主键是复合主键):

CREATE TABLE teaches (
    teacherbsn char(11) REFERENCES teacher(bsn),
    coursecode char(11) REFERENCES course(code),
    studentid char(7) REFERENCES student(id),
    PRIMARY KEY (teacherbsn, coursecode, studentid)
);

下面我会结合常见的业务场景给出关联查询示例,你可以根据自己的实际需求调整:

场景1:获取教师信息+授课课程+选课学生

假设course表包含code(主键)和name字段,student表包含id(主键)字段,我们用内连接关联所有相关表,返回完整的关联数据:

SELECT 
    t.bsn AS teacher_id,
    t.first_name || ' ' || t.surname AS full_name,
    t.scale,
    t.salary,
    c.name AS course_name,
    s.id AS student_id
FROM teacher t
JOIN teaches tc ON t.bsn = tc.teacherbsn
JOIN course c ON tc.coursecode = c.code
JOIN student s ON tc.studentid = s.id;

如果需要包含没有授课记录的教师,可以把JOIN换成LEFT JOIN,这样即使教师没有关联的课程/学生,也会出现在结果集中(对应的课程、学生字段为NULL)。

场景2:统计每位教师的授课数量

如果你需要统计教师的授课频次(去重同一课程的多次学生记录),可以用分组聚合:

SELECT 
    t.bsn,
    t.first_name || ' ' || t.surname AS teacher_name,
    COUNT(DISTINCT tc.coursecode) AS taught_course_count
FROM teacher t
LEFT JOIN teaches tc ON t.bsn = tc.teacherbsn
GROUP BY t.bsn, t.first_name, t.surname
ORDER BY taught_course_count DESC;

这里用LEFT JOIN保证所有教师都被统计,DISTINCT避免同一课程被重复计数。

场景3:筛选符合薪资约束且教授特定课程的教师

比如要找出教授课程CS101、且薪资符合职级范围的教师:

SELECT 
    t.bsn,
    t.first_name || ' ' || t.surname AS teacher_name,
    t.scale,
    t.salary,
    c.name AS course_name
FROM teacher t
JOIN teaches tc ON t.bsn = tc.teacherbsn
JOIN course c ON tc.coursecode = c.code
WHERE tc.coursecode = 'CS101'
  -- 复用表定义中的薪资约束作为筛选条件
  AND t.salary >= 20 * t.scale
  AND t.salary <= 35 * t.scale;

关键注意点

  • 给表起短别名(比如t代表teacher)能让SQL更简洁易读;
  • 关联表时必须通过外键字段连接(比如teacher.bsn和teaches.teacherbsn),避免出现笛卡尔积;
  • 根据需求选择连接类型:内连接(JOIN)只返回有完整关联的行,外连接(LEFT/RIGHT JOIN)会保留一侧的所有行。

如果你的实际需求和上面的场景不同(比如需要更复杂的筛选、聚合逻辑),可以补充说明具体要实现的功能,我再帮你调整!

内容的提问来源于stack exchange,提问作者Mike Keehnen

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 09:15:38