2009-12-24 3 views
2
mysql> select a.id,a.parent from qa a left join qa b on a.parent=b.parent where b.id=7; 
+----+--------+ 
| id | parent | 
+----+--------+ 
| 7 |  1 | 
| 8 |  1 | 
| 9 |  1 | 
+----+--------+ 
3 rows in set (0.00 sec) 

mysql> select a.id,a.parent from qa a left join qa b on a.parent=b.parent and b.id=7; 
+----+--------+ 
| id | parent | 
+----+--------+ 
| 1 | NULL | 
| 2 | NULL | 
| 3 | NULL | 
| 4 | NULL | 
| 5 | NULL | 
| 6 | NULL | 
| 7 |  1 | 
| 8 |  1 | 
| 9 |  1 | 
+----+--------+ 

정확히 동일하게 읽습니다.왜이 두 문장의 결과가 다른가요?

+0

무엇이 테이블에 있습니까? '선택 *부터 qa' –

답변

3

첫 번째 문은 조인을 만들고 WHERE b.id = 7을 사용하여 결과를 필터링합니다.

따라서 만 a.parent = b.parent에서 행 그 조인 결과 b.id = 7있다. 왼쪽을 만들 것이다

번째 문장은 품질 B b.id = 7에서 값만 따라서 QA 모든 행을 포함한 b.id = 7와 합류하고. 에서

그래서 모든 행a.parent = b.parent하지만 쇼 값 에서 Bb.id = 7

0

당신이 첫 번째 쿼리 제한하고 오른쪽 자동으로 LEFT JOIN이 반환 할 수있는 NULLs을 제거하여 결과의 명령문은 INNER JOIN을 사용하는 경우 동일한 결과를 리턴합니다.

0

첫 번째 조건은 select 문에 조건 (where)이 있고 두 번째 조건은 조인에 b.id 조건을 적용합니다. 워드 프로세서

:

조인 LEFT에 일치하는 상기 ON에서 오른쪽 표의 행하거나 사용 부품이없는 경우는 NULL로 설정된 모든 열과 행은 우측 테이블에 사용된다.

관련 문제