집 >데이터 베이스 >MySQL 튜토리얼 >조인된 테이블에서 LIMIT 1을 사용하여 테이블을 효율적으로 조인하는 방법은 무엇입니까?
문제:
한 테이블만 검색하면서 두 테이블을 조인하려면 특히 조인된 테이블에 여러 레코드가 존재하는 상황에서 기본 테이블의 각 레코드에 대해 조인된 테이블의 레코드를 삭제합니다.
하위 쿼리를 사용한 솔루션:
이 접근 방식 결과를 단일 레코드로 제한하면서 조인된 테이블에서 여러 열을 선택할 때 발생하는 오류를 효과적으로 방지합니다. 핵심은 하위 쿼리를 활용하여 원하는 레코드의 기본 키를 검색하는 것입니다. 그런 다음 하위 쿼리를 사용하여 기본 쿼리에서 조인된 테이블을 필터링합니다.
SELECT c.id, c.title, p.id AS product_id, p.title AS product_title FROM categories AS c JOIN products AS p ON p.id = ( --- the PRIMARY KEY SELECT p1.id FROM products AS p1 WHERE c.id=p1.category_id ORDER BY p1.id LIMIT 1 )
이 쿼리는 조인된 테이블에 기본 테이블보다 훨씬 많은 수의 레코드가 포함되어 있는 경우에도 뛰어난 성능을 보여줍니다.
대체 접근 방식:
하위 쿼리 접근 방식이 일반적으로 최적이지만 사용할 수 있는 대체 방법이 있습니다. 그러나 잠재적인 성능 영향을 고려하는 것이 중요합니다.
SELECT id, category_title, (array_agg(product_title))[1] FROM (SELECT c.id, c.title AS category_title, p.id AS product_id, p.title AS product_title FROM categories AS c JOIN products AS p ON c.id = p.category_id ORDER BY c.id ASC) AS a GROUP BY id, category_title;
SELECT c.id, c.title, p.id AS product_id, p.title AS product_title FROM categories AS c CROSS JOIN (SELECT product_id, title, ROW_NUMBER() OVER (PARTITION BY category_id ORDER BY id) AS rn FROM products) AS p WHERE rn = 1;
위 내용은 조인된 테이블에서 LIMIT 1을 사용하여 테이블을 효율적으로 조인하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!