在MySQL中找到缺失的值

Mat*_*ode 1 mysql sql

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

我有2张桌子; 课程和用户.两者都包含字段'id',然后分别包含'coursename'和username'.

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

-----------------------
| user_id | course_id |
-----------------------
|     1   |     1     |
|     1   |     2     |
|     1   |     3     |
|     1   |     4     |
-----------------------
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,这个表数据不是基于关系构建的,而是使用两个表'courses'和'users'在PHP中生成的.

我不知道如何写出如何查找用户'1'未注册的课程的查询,如果有10个课程,但我们可以看到用户'1'仅在1-4课程.

我想用像LIKE或NOT LIKE这样的东西?

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'
Run Code Online (Sandbox Code Playgroud)

我尝试过使用!=和<>,但这并没有显示我需要的东西; 用户未注册的课程列表.

对不起,如果我是模糊的,试着让我的头围绕它!

使用MySQL 5.0,在现有系统上我无法修改,只能从​​(目前)查询.

Li0*_*liQ 5

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
    )
Run Code Online (Sandbox Code Playgroud)