집 >데이터 베이스 >MySQL 튜토리얼 >MySQL 테이블에서 여러 범주에 속하는 항목을 효율적으로 선택하는 방법은 무엇입니까?
여러 카테고리의 항목 식별
문제:
연관 정보가 포함된 MySQL 테이블에서 (item_id 및 Category_id), 목표는 지정된 범주 집합에 존재하는 항목만 선택하는 것입니다.
예:
주어진 테이블:
+-----------------------+ | item_id | category_id | +-----------------------+ | 1 | 200 | | 1 | 201 | | 1 | 202 | | 2 | 201 | | 2 | 202 | | 3 | 202 | | 3 | 203 | | 4 | 201 | | 4 | 207 | +-----------------------+
카테고리 ID 201과 202가 전달되면 두 카테고리에 모두 존재하는 유일한 항목이므로 쿼리는 항목 1과 2만 반환해야 합니다.
해결책 1: 자체 -Join
SELECT c1.item_id FROM item_category AS c1 INNER JOIN item_category AS c2 ON c1.item_id = c2.item_id WHERE c1.category_id = 201 AND c2.category_id = 202
이 기술에는 테이블의 데카르트 곱을 생성하는 자체 조인이 필요하므로 대규모 데이터 세트에는 비효율적일 수 있습니다.
해결책 2: GROUP BY 및 HAVING
SELECT c.item_id, COUNT(*) AS cat_count FROM item_category AS c WHERE c.category_id IN (201,202) GROUP BY c.item_id HAVING cat_count = 2
이 솔루션은 GROUP BY 및 HAVING을 사용하여 각 항목의 범주 수를 계산하고 지정된 집합과 일치하는 범주를 필터링합니다. 더 큰 데이터 세트에 대해 더 나은 성능을 발휘합니다.
위 내용은 MySQL 테이블에서 여러 범주에 속하는 항목을 효율적으로 선택하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!