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

如何编写子查询筛选讲座教室无重复的课程

正确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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 11:46:14