>  기사  >  데이터 베이스  >  왼쪽 조인 연결을 사용하여 mysql의 중복 문제를 해결하는 방법

왼쪽 조인 연결을 사용하여 mysql의 중복 문제를 해결하는 방법

王林
王林앞으로
2023-06-02 13:13:412838검색

    Mysql은 왼쪽 조인을 사용하여 중복 연결

    문제 설명

    조인 쿼리를 사용할 때, 예를 들어 테이블 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;

    왼쪽 조인 연결을 사용하여 mysql의 중복 문제를 해결하는 방법

    실행 결과가 실제로는 사용자 테이블의 총 레코드 수

    문제 해결

    사실 이 문제는 안목이 있으면 한눈에 알 수 있는데, 왼쪽 조인 키워드는 제품 테이블에서 고유하지 않기 때문에 이 부분은 고유하지 않은 부분입니다. 데이터는 데카르트 곱을 생성하므로 예상보다 더 많은 실행 결과가 발생합니다.

    해결책은 고유 키를 사용하여 연결하고 쿼리를 수행하는 것입니다.

    mysql이 왼쪽 조인을 사용할 때 오른쪽 테이블의 데이터에 중복된 데이터가 있습니다.

    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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

    성명:
    이 기사는 yisu.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제