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 ;
答案 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的所有用户。