我是SQL的初学者.我有一个名为Enregation的表,其中有用户(USER_ID),他们可以拥有使用Course_id表示的单个或多个课程.

我想找到那些只注册了课程10的用户,他们没有应得的费用(DUDE_FE费),也没有其他的费用. 这是我对这个问题的try ,但它不起作用:

SELECT user_id FROM student_enrollment WHERE course_id = 10 and due_fee = 0.00

该查询 Select 的是Course_id为10的用户,但我如何对其进行过滤,以便删除同时具有10和其他Course_id的用户?那么最终结果将只是Course_id为10的用户.

推荐答案

您可以使用EXISTS逻辑来表达这个问题:

SELECT user_id
FROM student_enrollment se1
WHERE course_id = 10 AND due_fee = 0 AND
      NOT EXISTS (
          SELECT 1
          FROM student_enrollment se2
          WHERE se2.user_id = se1.user_id AND
                se2.course_id <> 10
      );

另一种方法是使用聚合:

SELECT user_id
FROM student_enrollment
WHERE due_fee = 0
GROUP BY user_id
HAVING SUM(course_id <> 10) = 0;

Mysql相关问答推荐

JOOQ-如何在一个查询中引用多个(但不是所有)表中的所有字段

错误:数据包顺序错误.GET:0预期:10 node JS MySQL

为分组记录MySQL取取值为TRUE的单行

如何在MySQL中检索两列的值不同的行

含有子查询的MySQL函数出现语法错误

错误:此查询集包含对外部查询的引用,并且只能在子查询中使用

Select 同一张表中的结果数?

从 MySQL 8.0.12 升级到 8.0.32 时出错

当查询 MySQL 的 goroutine 过多时,Go 会出现panic

为什么这个 NOT NULL 到 NULL 迁移会触发大量 I/O 操作?

MySQL查询以获取日期范围内的租赁订单

如何使用 Raw SQl / Laravel 进行累积计数 - Eloquent ORM

插入重复键查询以在每一行上进行自定义更新

使用case查询并更新最后一条记录

mysql错误:错误1018(HY000):无法读取'.'的目录(错误号:13)

MySQL INSERT IF(自定义 if 语句)

如何通过一个查询批量更新 mysql 数据?

重新加载 .env 变量而不重新启动服务器(Laravel 5,共享主机)

我可以在单个 Amazon RDS 实例上创建多少个数据库

Mysql:创建表时将DATETIME的格式设置为'DD-MM-YYYY HH:MM:SS'