반응형
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
반응형
'MySql' 카테고리의 다른 글
MySQL lower_case_table_names는 변경되지 않습니다. (0) | 2020.12.26 |
---|---|
MySQL 짧은 한 달 동안 MySQL DATE_FORMAT '% M'? (0) | 2020.12.26 |
MySQL Mysql to select month-wise record even if data not exist (0) | 2020.12.26 |
MySQL Use of COUNT to display distinct records with more than 2 occurrences in MySQL (0) | 2020.12.26 |
MySQL C ++에서 mysql을 어떻게 사용할 수 있습니까? (0) | 2020.12.26 |
댓글