首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在MySQL中查找缺少的值

在MySQL中查找缺少的值
EN

Stack Overflow用户
提问于 2010-08-10 19:45:36
回答 3查看 5.6K关注 0票数 1

我正在尝试编写一个查询,以找出哪些用户没有注册某些课程。

我有两个表:课程和用户。两者都包含字段'id‘,然后分别包含'coursename’和‘username’字段。

使用这两个表,现有系统将用户添加到第三个表(称为enrolled_users)。用户每行占一行。例如,如果用户id '1‘在4门课程中,则enrolled_users如下所示:

代码语言:javascript
复制
-----------------------
| user_id | course_id |
-----------------------
|     1   |     1     |
|     1   |     2     |
|     1   |     3     |
|     1   |     4     |
-----------------------

正如您可以看到的,该表数据不是基于关系构建的,它是在PHP中使用两个表'courses‘和'users’生成的。

如果有10门课程,我不知道如何查询用户'1‘没有注册的课程,但我们可以看到用户'1’只在课程1-4上。

我应该用像或不像这样的东西吗?

代码语言:javascript
复制
SELECT u.id, c.id, ec.user_id, ec.course_id
FROM users u, courses c, enrolled_courses ec
WHERE u.id = ec.user_id
AND c.id = ec.course_id
AND u.id = '1'

我尝试过使用!=和<>,但这并没有显示我需要的内容;这是一个用户未注册的课程列表。

抱歉,如果我是含糊其辞的,试图让我的头脑明白它!

使用MySQL 5.0,在现有的系统上我不能修改,只能从(目前)查询。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-08-10 19:59:01

代码语言:javascript
复制
SELECT
    *
FROM
    courses c
WHERE
    c.id NOT IN (
    SELECT
        ec.course_id
    FROM
        enrolled_courses ec
    WHERE
        ec.user_id = 1 AND ec.course_id IS NOT NULL
    )
票数 5
EN

Stack Overflow用户

发布于 2010-08-10 19:53:04

只需使用not in和sub select。

代码语言:javascript
复制
select * from courses c where c.id not in 
   (select  course_id  from enrolled_courses  where  user_id='1') 
票数 0
EN

Stack Overflow用户

发布于 2010-08-10 19:53:51

如果要查找特定的单个用户ID,请确保将该ID条件包括在WHERE子句中,否则,将其留空,它将为您提供未通过笛卡尔产品注册所有可能课程的所有人员(因为用户和课程表之间没有直接连接)。这可能是非常大/耗时的,如果您的课程表是100s的课程,而有人只参与2-3-4课程,则会非常耗时。

代码语言:javascript
复制
select 
      u.id,
      c.id CourseID
   from 
      users u,
      courses c
   where
          u.id = 1
      AND c.id NOT IN 
           ( select ec.Course_ID
                from enrolled_courses ec
                where ec.user_id = u.id )
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3448544

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档