比较两个列表并返回其他列表中未包含的值

时间:2017-10-30 03:44:06

标签: mysql

Employee List (List 1)

USER ID    NAME
1          John 
2          Jane 
3          Rob
4          Bill
5          Sally

Enrolled Students (List 1)

ID   PID     USER_ID
1     1        1
2     1        2
3     2        1
4     2        2
5     2        3

我正试图找到一种方法来确定我是否想要查找未注册x课程的人。

因此,如果我想知道哪些员工未参加课程1,结果将是

USER_ID
3
4
5

然后,如果我想知道谁没有参加课程2

USER_ID
4
5

我尝试了这个但是它返回了所有注册课程的学生。如果学生尚未注册,则没有NULL pid。

SELECT e.user_id, e.full_name, es.student
FROM employees e LEFT OUTER JOIN
     enrolled_students es 
     ON e.user_id = es.student AND es.pid = 40
WHERE e.level = 3 AND es.student IS NULL ;

2 个答案:

答案 0 :(得分:0)

首先我们必须检查谁在课程中注册,然后我们必须获取包含除查询第一部分中返回的名称之外的其他名称的名称列表。这样的事情可以用于此目的:

SELECT 
    e1.*
FROM
    employee e1
        LEFT JOIN
    (SELECT 
        e.user_id
    FROM
        employee e
    JOIN enrolled_student es ON e.user_id = es.user_id
    WHERE
        es.pid = 1) t ON e1.user_id = t.user_id
WHERE
    t.user_id IS NULL;

答案 1 :(得分:0)

试试这个:

select id from users where id not in (select user_id from enrolled where pid = 1)

选择未注册到课程1的所有用户。