조인 쿼리를 사용할 때, 예를 들어 테이블 A를 기본 테이블로 사용하고 테이블 B를 왼쪽 조인하는 경우 테이블에 몇 개의 레코드가 있는지 예상합니다. A, 쿼리 결과는 있는 만큼의 레코드가 나오겠지만, 이런 결과가 나올 수도 있습니다. 즉, 쿼리된 총 레코드 수가 테이블 A의 전체 레코드 수보다 많고, 다음과 같은 경우 일부 열이 반복됩니다. 쿼리 결과가 표시됩니다. 단순 즉, 데카르트 곱이 생성됩니다.
테이블 A는 사용자 테이블(user)이고 필드는 다음과 같습니다.
ID 이름 userid
1 aaaa 10001
2 bbbb 10002
3 ccccc 10003
테이블 B는 첫 번째 유형의 product 테이블(제품)의 필드는 다음과 같습니다.
ID 제목 시간 userid
1 제목 1 2014-01-01 10002
2 제목 2 2014-01-01 10002
3 제목 3 2014-01-01 10001
4 제목 4 2018- 03-20 10002
5 Title 5 2018-03-20 10003
이때, 아래의 sql을 이용하여 실행해 본 결과
selecct * from user left join product on user.userid=product.userid;
실행 결과가 실제로는 사용자 테이블의 총 레코드 수
사실 이 문제는 안목이 있으면 한눈에 알 수 있는데, 왼쪽 조인 키워드는 제품 테이블에서 고유하지 않기 때문에 이 부분은 고유하지 않은 부분입니다. 데이터는 데카르트 곱을 생성하므로 예상보다 더 많은 실행 결과가 발생합니다.
해결책은 고유 키를 사용하여 연결하고 쿼리를 수행하는 것입니다.
LEFT JOIN 키워드는 왼쪽 테이블(table_name1)의 모든 행을 반환합니다. 오른쪽 테이블(table_name2)에 일치하는 행이 없는 경우에도 마찬가지입니다. 이때, 오른쪽 테이블(table_name2)에 on 키워드로 필터링하여 데이터가 없거나 1개의 데이터만 있어도 문제가 없습니다.
제가 말씀드리고 싶은 것은 오른쪽 테이블(table_name2)에 중복된 데이터(비즈니스에서 완전 중복)가 있는 경우 어떻게 해야 하느냐는 것입니다.
on 키워드로 필터링한 후 오른쪽 테이블(table_name2)에 중복된 데이터가 나타나면 이때 발견되는 데이터는 오른쪽 테이블 데이터 * 중복 데이터 + 오른쪽 테이블의 기타 조건부 데이터이며, 데이터 개수는 다음과 같습니다. 우리는 다른 것이 필요합니다.
내 솔루션은 먼저 필터 필드 그룹화에 따라 올바른 테이블(table_name2)을 쿼리하고 동일한 데이터를 필터링한 다음 결과를 연결에 적합한 테이블로 처리하는 것입니다
前面脑补 LEFT JOIN (SELECT MODEL_CODE,MODEL_NAME from tm_model GROUP BY MODEL_CODE) tm on tav.model_code = tm.MODEL_CODE 后面脑补
위 내용은 왼쪽 조인 연결을 사용하여 mysql의 중복 문제를 해결하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!