INNER JOIN
두 테이블 사이에서 쿼리를 실행하면 모두 182라는 정확한 결과를 얻습니다.
그러나 쿼리를로 실행하면 LEFT JOIN
8 개의 레코드 만 반환됩니다. 조인을 잘못 수행하고 있습니까?
먼저 코드 :
select e.username,
e.password,
coalesce(r.access_level, 0) as orgid
from employees e
left join retired r
on e.employeeid = r.employeeid
where access_level=3
Retired
테이블은 182 기록을 가지고있다. 두 테이블은 모두 EmployeeId
.
Retired
테이블 의 82 개 레코드 도 존재 Employees
하지만 Employees
테이블에는 7,000 개 이상의 레코드가 있습니다.
필드 이름 중 하나가 값 3으로 Retired
호출 Access_Level
됩니다.
LEFT JOIN
정확한 결과를 얻지 못하는 이유 가 있습니까?
외부 조인 및 조건의 트릭은 조건을 where 절에서 join condtions 절로 이동하는 것입니다.
select
e.username,
e.password,
coalesce(r.access_level, 0) as orgid
from employees e
left join retired r
on e.employeeid = r.employeeid
and access_level=3
이 작업을 수행해야하는 이유는 where 절이 조인이 이루어진 후 실행되는 행 집합 의 필터 이기 때문입니다 . 에 절은 효과적으로 외부 만드는에서 외부 조인 된 테이블에 조건을 가짐으로써 가입 내부가 가입 놓친 외부가 조인 때문에, 조인 된 테이블의 컬럼의 값을, 그러나 절은 주장한다 어디에서 조건이 있다 거기에 가치.null
join 절의 조건은 조인이 수행 될 때 실행 되므로 where 절에서 조건을 이동하면 조인이 누락 되는 동안 조건을 부과 할 수 있지만 적합한 행이 없으면 모두 null 조인 된 행을 반환합니다. 조인 된 테이블에서.
댓글에서 더 많은 정보를 얻은 후에는 이것이 원하는 것 같습니다.
select distinct
e.username,
e.password,
coalesce(r.access_level, 0) as orgid
from employees e
join retired r
on e.employeeid = r.employeeid
and access_level=3
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다