> 데이터 베이스 > MySQL 튜토리얼 > 내 MySQL LEFT JOIN 쿼리가 예상보다 적은 수의 행을 반환하는 이유는 무엇입니까?

내 MySQL LEFT JOIN 쿼리가 예상보다 적은 수의 행을 반환하는 이유는 무엇입니까?

Barbara Streisand
풀어 주다: 2024-12-13 14:11:10
원래의
438명이 탐색했습니다.

Why are My MySQL LEFT JOIN Queries Returning Fewer Rows Than Expected?

MySQL Left Join의 Null 행 문제 해결

MySQL에서 Left Join 쿼리를 실행할 때 다음과 같은 문제가 발생하는 것이 일반적입니다. 왼쪽 테이블의 모든 행이 반환되지 않는 시나리오입니다. 이 문제는 ON 절 대신 WHERE 절에 조인 조건이 지정된 경우 발생합니다.

jos_hp_properties(pr) 및 jos_hp_properties2(pr7) 테이블을 조인하는 다음 쿼리를 고려하십시오.

SELECT pr.*, pr7.value AS `room_price_high`
FROM `jos_hp_properties` pr
LEFT OUTER JOIN `jos_hp_properties2` pr7 ON pr7.property=pr.id
WHERE pr7.field=23
로그인 후 복사

사용자가 언급했듯이 이 쿼리는 테이블에 27개 행이 있음에도 불구하고 첫 번째 테이블에서 한 행만 반환합니다. jos_hp_properties 테이블. 그 이유는 WHERE 조건 pr7.field=23이 jos_hp_properties2 테이블에서 일치하는 필드 값 23이 없는 jos_hp_properties의 모든 행을 필터링하기 때문입니다.

이 문제를 해결하고 다음에서 모든 행을 검색하려면 두 번째 테이블의 room_price_high 값을 포함하는 첫 번째 테이블(또는 일치하는 필드가 없는 경우 NULL), WHERE 조건은 왼쪽 조인의 ON 절:

SELECT pr.*, pr7.value AS `room_price_high`
FROM `jos_hp_properties` pr
LEFT OUTER JOIN `jos_hp_properties2` pr7 ON pr7.property=pr.id AND pr7.field=23
로그인 후 복사

ON 절에 조인 조건을 배치하면 왼쪽 조인은 jos_hp_properties 테이블의 모든 행을 유지하고 일치하는 필드 값을 기준으로 jos_hp_properties2 테이블만 필터링합니다. 이렇게 하면 두 번째 테이블에 해당 행이 없는 경우에도 첫 번째 테이블의 모든 행이 반환됩니다.

위 내용은 내 MySQL LEFT JOIN 쿼리가 예상보다 적은 수의 행을 반환하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿