2017-12-26 26 views
6

두 테이블의 데이터를 표시하고 일치하지 않는 데이터를 모두 표시하려고합니다. 나는이 쿼리를 시도했다.mysql에서 JOIN을 사용하여 일치하지 않는 모든 데이터를 표시하는 방법

SELECT * FROM student s 
LEFT JOIN grade g ON g.student_id=s.student_id 
WHERE s.student_id = 9 

난 단지 그들이 어떤 등급이없는 경우에도 나는 모든 학생들에게 보여주는 필요 동안 학년 학생들을 보여주고 무엇을 얻을. 또한 inner join, right join을 사용해 보았지만 그 결과는 같습니다. 쿼리는 어떻게해야합니까?

+0

샘플 데이터 테이블 추가 ??? –

답변

7

왼쪽 테이블 (학생 테이블)에서 해제 일치하는 행이 s.student_id 동일한 널 (null)을 가지고 있기 때문에 문제는, WHERE s.student_id = 9이며 널 (null)이 9 또는 아무것도 동일하지 않기 때문에 절은 널 (NULL) student_id 값이 행을 제거 곳이 .

시도는 wherejoin 상태로 이동합니다 :

SELECT * 
FROM student s 
LEFT JOIN grade g ON g.student_id=s.student_id AND s.student_id = 9; 

또는 NOT IN를 사용

SELECT * 
FROM student s 
WHERE s.student_id = 9 
    AND student_id NOT IN(SELECT student_id 
         from grade 
         where student_id is not null); 
+0

첫 번째 트릭을 수행합니다. 고마워. – Abaij

1

을 당신은 내가 절 작동하는 SQL JOIN 어떻게 오해 생각 말에서. 그게 아니라면 우리는 그 테이블의 내용과 당신이 보여줄 필요가있는 것에 대한 더 많은 정보를 필요로 할 것입니다.

귀하의 질의는 다음과 같습니다 ON 학생의

LEFT 학년 g 가입 FROM

SELECT * g.student_id = s.student_id

s.student_id = 9

필요한 항목 :

나는 그들이 당신의 쿼리를 요청하는 어떤 어떤 등급

이없는 경우에도 모든 학생을 보여주는 필요 :

"를 9에 자신의 ID를 가진 학생들이 동일한에 대한 모든 데이터를 선택합니다 학생과 학년 테이블 모두 "

첫 번째 질문은 다음과 같습니다. Grade 테이블의 데이터가 실제로 필요합니까?

그렇다면 다음 절은 문제 그리고 당신은

(다음 하지 IN 절을 @Brittain '제의 답을 확인) ID = 9뿐만 아니라 다른 사람들과 학생들 만 얻을 싶지 않을 수도 WHERE

그렇지 않다면 (그리고 무엇이 필요한지) 그러면 SELECT * FROM Student WHERE student_id = 9이 작업을 수행해야합니다. 성적에 대한 정보없이 모든 학생에 관한 정보를 얻을 수 있습니다.