如何编写子查询筛选讲座教室无重复的课程
正确SQL查询写法
要找出所有讲座教室均无重复的课程,你需要判断单个课程下的所有教室是否没有重复,你的原语句逻辑无法实现这个需求——它只是筛选出教室存在于全局去重列表的记录,完全没考虑课程内部的重复情况。
以下是两种可行的写法:
方法1:分组对比计数
通过分组统计课程的总讲座数和去重后的教室数,当两者相等时,说明该课程的每个讲座教室都唯一:
SELECT course FROM classes GROUP BY course HAVING COUNT(room) = COUNT(DISTINCT room);
方法2:排除存在重复教室的课程
先找出所有存在重复教室的课程,再排除这些课程:
SELECT DISTINCT course FROM classes WHERE course NOT IN ( SELECT course FROM classes GROUP BY course, room HAVING COUNT(*) > 1 );
逻辑说明
- 方法1的核心:
COUNT(room)是课程的总讲座数量,COUNT(DISTINCT room)是该课程使用的不同教室数量,两者相等意味着没有重复的教室被使用。 - 方法2的核心:子查询先定位那些在同一课程下、同一教室出现多次的课程,主查询再筛选出不在这个"问题课程"列表里的课程。
内容的提问来源于stack exchange,提问作者Robert Selangor
相关产品推荐
相关产品推荐

