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

MySQL查询指定两学生共同教师数的实现方法求助

查询学生共同教师数量的可行方法

我明白你现在的需求——从关联学生和教师的teaching表里,找出指定两个学生(比如s1和s2)的共同教师数量,之前尝试INTERSECT和自连接没成功对吧?我给你几个肯定能行的方法,顺便说说可能你之前写法的问题:

方法一:正确的自连接写法

很多时候自连接没得到正确结果,是因为没处理重复或者连接条件不对,试试这个:

SELECT COUNT(DISTINCT t1.t_id) AS common_teacher_count
FROM teaching t1
JOIN teaching t2 ON t1.t_id = t2.t_id
WHERE t1.s_id = 's1' AND t2.s_id = 's2';

解释:把teaching表和自身做连接,连接条件是教师ID相同,分别筛选出s1和s2的记录,最后用COUNT(DISTINCT)统计不重复的教师ID数量(避免同个师生关系重复存储导致计数错误)。

方法二:子查询+IN语句

这种写法逻辑更直观,先找出其中一个学生的所有教师,再筛选另一个学生的交集:

SELECT COUNT(DISTINCT t_id) AS common_teacher_count
FROM teaching
WHERE s_id = 's1'
AND t_id IN (SELECT t_id FROM teaching WHERE s_id = 's2');

解释:内层子查询先拿到s2的所有教师ID,外层查询过滤出s1的教师里属于这个列表的,再统计数量。

方法三:正确使用INTERSECT(适用于支持该语法的数据库)

如果你的数据库支持INTERSECT(比如PostgreSQL、SQL Server、Oracle),那正确的写法需要把交集结果放到子查询里统计:

SELECT COUNT(*) AS common_teacher_count
FROM (
    SELECT t_id FROM teaching WHERE s_id = 's1'
    INTERSECT
    SELECT t_id FROM teaching WHERE s_id = 's2'
) AS common_teachers;

解释:INTERSECT会返回两个查询的交集(也就是两个学生的共同教师ID),外层查询直接统计这个交集的行数,就是共同教师的数量。你之前可能没把INTERSECT的结果嵌套成子查询来计数,所以没得到正确数值。

内容的提问来源于stack exchange,提问作者Iliass Mw

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 08:39:02