본문 바로가기
MySql

MySQL 왼쪽 외부 조인 with where 절-일치하지 않는 행 반환

by 베이스 공부 2020. 12. 26.
반응형

pq pe 의 두 테이블이 있습니다. 오른쪽 테이블 ( pe )에서 LEFT OUTER JOIN 왼쪽 테이블 ( pq )을 시도하고 있습니다.

표는 다음과 같습니다.

pq:
id | data
1  | "abc"
2  | "efg"

pe:
pqid | uid   | data
2    | 54321 | "uvw"
2    | 12345 | "xyz"

다음 쿼리를 사용하여 pq .id의 처음 2 개 행을 pe .pqid와 일치시킬 수 있습니다.

SELECT pq.id, pq.data, pe.data FROM pq
    LEFT OUTER JOIN pe ON pq.id = pe.pqid
    ORDER BY pq.id LIMIT 2

나는 얻다:

pq.id | pq.data |  pe.data
1     | "abc"   |  
2     | "efg"   |  "uvw"

그러나 다음과 같이 WHERE 문을 사용하면 :

SELECT pq.id, pq.data, pe.data FROM pq
    LEFT OUTER JOIN pe ON pq.id = pe.pqid
    WHERE pe.uid='12345'
    ORDER BY pq.id LIMIT 2

pe .pqid 및 pe .uid와 일치하는 행이 하나만 표시됩니다.

pq.id | pq.data |  pe.data
2     | "efg"   |  "xyz"

따라서 WHERE 절을 사용하면 올바른 pe .data를 얻지 만 pq .id와 일치하는 pq 행은 얻지 못합니다. strong> pe .pqid

나는 이것을 얻어야한다 :

pq.id | pq.data |  pe.data
1     | "abc"   |  
2     | "efg"   |  "xyz"

 

해결 방법

 

예. where 절은 왼쪽 외부 조인을 내부 조인으로 바꾸고 있습니다.

왜? 일치하는 항목이없는 경우 pe.pqid 의 값은 NULL ( pe.uid 와 같음)입니다. 따라서 where 절의 비교는 실패합니다 ( NULL 에 대한 거의 모든 비교는 거짓으로 간주되는 NULL 을 반환합니다).

해결책은 비교를 on 절로 이동하는 것입니다.

SELECT pq.id, pq.data, pe.data
FROM pq LEFT OUTER JOIN
     pe
     ON pq.id = pe.pqid and
        pe.uid='12345'
ORDER BY pq.id LIMIT 2

 

참조 페이지 https://stackoverflow.com/questions/17910729

 

 

반응형

댓글