2017-04-26 2 views
0

을 감안할 때, 다음과 같은 테이블 :외부 조인을 사용하여 사용하지 않는 레코드를 찾으려면 어떻게합니까?

+--------------+ 
| CLASSES  | 
+==============+ 
| name | room | 
+------+-------+ 
| 1A | A1.01 | 
| 1B | NULL | 
| 1C | A1.03 | 
+------+-------+ 

+-------+ 
| ROOMS | 
+=======+ 
| id | 
+-------+ 
| A1.01 | 
| A1.02 | 
| A1.03 | 
+-------+ 

나는 다음과 같은 결과 예상 :

+--------------+ 
| UNUSED ROOMS | 
+==============+ 
| id   | 
+--------------+ 
| A1.02  | 
+--------------+ 

방법이 외부 조인 사용하여 수행 할 것입니까?

다음 쿼리는 정확히 무엇에 대한 질문을 받았다 않습니다
+0

질문 제목을 사용해보십시오. – philipxy

답변

1

: 무엇을 설명하려고

SELECT rooms.* 
FROM rooms 
    LEFT JOIN classes ON rooms.id = classes.room 
WHERE 
    classes.room IS NULL; 

여기에 무슨 일이 일어나고 :

+--------------------------------------------+ 
| LEFT JOINED        | 
+============================================+ 
| rooms.id | classes.name | classes.room | 
+-------------+--------------+---------------+ 
| A1.01  | 1A   | A1.01   | 
| A1.02  | NULL   | NULL   | 
| A1.03  | 1C   | A1.03   | 
+-------------+--------------+---------------+ 
: 왼쪽 roomsclasses 가입 후

, 당신은이 결과를 얻을 수

왼쪽 가입은 을 반환하므로 모두 왼쪽 테이블의 레코드 (rooms) rooms.idclasses.room과 일치하지 않는 경우에도 후자가 null이기 때문에 rooms 열은 여전히 ​​반환됩니다. 레코드가 일치하지 않았으므로 classes.name도 null입니다. 나는 이것이 초보자에게 다소 혼란 스럽다는 것을 안다. (혼자처럼 내 경험을 공유하고 싶다.) 조금 혼란스러워서 죄송합니다.

그래서 여기에서 수행해야 할 일은 room이 null 인 classes을 필터링하는 것입니다.

+--------------+ 
| UNUSED ROOMS | 
+==============+ 
| id   | 
+--------------+ 
| A1.02  | 
+--------------+