2017-10-30 1 views
0
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 과정에 등록되지 않은 사람을 조회 할 방법을 찾고자합니다. 나는 물론 2두 목록을 비교하고 다른 목록에없는 값을 반환하십시오.

USER_ID 
4 
5 

I에 등록되지 않은 사람을 알고 싶다면

그래서 직원 1 코스에 등록되지 않은 알고 싶다면 그 결과는 다음

USER_ID 
3 
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

에 오신 것을 환영합니다 등록되지 않은 모든 사용자를 선택, [어떻게 읽어 보시기 바랍니다 묻기] (https://stackoverflow.com/help/how-to-ask). [MCVE 제작 방법] (https://stackoverflow.com/help/mcve)에 특히주의하십시오. 좋은 질문을 게시하는 데 더 많은 노력을 기울일 수 있습니다 : 읽기 쉽고 이해하기 쉽고 주제가 (https://stackoverflow.com/help/on-topic)입니다 - 기회가 더 많습니다 관련 인력을 유치하면 더 빨리 도움을받을 수 있습니다. 행운을 빕니다! – alfasin

+0

데이터 모델에는 나타나지 않지만 쿼리 모델에는 별다른 열정이없는 쿼리가 있습니다. – Strawberry

답변

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; 
0

이 시도 : 이런 식으로 뭔가가이 목적을 위해 수행 할 수 있습니다

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

에 유래에 코스 1.

관련 문제