왼쪽 조인과 내부 조인
SQL에서 왼쪽 조인과 내부 조인은 서로 다른 결과 집합을 생성하는 두 가지 기본 조인 유형입니다. 왼쪽 조인은 왼쪽 테이블의 모든 행을 반환하고 조인 조건에 따라 오른쪽 테이블의 행을 일치시킵니다. 일치하는 항목이 없으면 오른쪽 테이블의 누락된 값은 NULL로 표시됩니다. 반면, 내부 조인은 조인 조건을 충족하는 행만 반환하고 해당 조건을 충족하지 않는 두 테이블의 행은 제외합니다.
왼쪽 조인 동작 수정
In 제공된 SQL 쿼리:
SELECT a.foo b.bar c.foobar FROM tableOne AS a INNER JOIN tableTwo AS b ON a.pk = b.fk LEFT JOIN tableThree AS c ON b.pk = c.fk WHERE a.foo = 'something' AND c.foobar = 'somethingelse'
WHERE c.foobar = 'somethingelse' 절의 존재 LEFT JOIN 조건 이후에는 놀라운 효과가 있습니다. Left 조인을 내부 조인으로 변환하는 것으로 보이며, tableThree에 'somethingelse'가 없으면 행이 반환되지 않습니다.
설명
이상해 보이는 이 동작은 SQL 문의 평가 순서에 따라 발생합니다. WHERE 절은 조인이 수행된 후에 처리됩니다. 따라서 c.foobar = 'somethingelse'가 WHERE 절에 지정되면 c.foobar가 NULL인 왼쪽 조인에서 모든 행을 효과적으로 필터링합니다. 결과적으로 c.foobar가 지정된 값('somethingelse')과 일치하는 행만 최종 결과 세트에 유지됩니다.
해결책
원하는 값을 유지하려면 왼쪽 조인 동작에는 두 가지 옵션이 있습니다.
WHERE 절을 다음으로 수정합니다. include OR c.foobar IS NULL, 아래와 같이:
WHERE a.foo = 'something' AND (c.foobar = 'somethingelse' OR c.foobar IS NULL)
이렇게 하면 c.foobar가 NULL인 행이 결과 세트에 포함될 수 있습니다.
c.foobar = 'somethingelse' 비교를 왼쪽 조인의 ON 절로 이동하여 해당 조건을 만족하는 행만 결과에 포함되도록 합니다. 세트:
LEFT JOIN tableThree AS c ON b.pk = c.fk AND c.foobar = 'somethingelse'
위 내용은 왼쪽 조인과 내부 조인: WHERE 절이 왼쪽 조인 결과에 어떤 영향을 미칩니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!