집 >데이터 베이스 >MySQL 튜토리얼 >SQL에서 관련 테이블의 첫 번째 행에 효율적으로 조인하는 방법은 무엇입니까?
SQL에서 관련 테이블의 첫 번째 행만 선택
많은 데이터세트에는 관련 테이블의 여러 항목이 포함된 행이 포함되어 있습니다. 이러한 테이블을 효율적으로 조인하려면 데이터 중복을 방지하는 전략이 필요합니다. 이 문서에서는 기본 테이블의 각 항목에 대해 관련 테이블의 첫 번째 행만 조인하는 방법을 보여줍니다.
과제: 중복 조인 방지
관련 테이블에 단일 주문 ID에 대한 여러 항목이 있는 경우 단순 조인을 통해 각 주문에 대해 여러 행이 생성될 수 있습니다. 해당하는 첫 번째 행만 선택하는 방법이 필요합니다.
비효과적인 접근 방식: TOP 1
함정
내부 쿼리가 외부 테이블의 열(예: TOP 1
)에 액세스할 수 없기 때문에 내부 선택 내에서 OrderID
을 사용하는 순진한 시도는 실패합니다.
효과적인 솔루션: 검증된 두 가지 방법
원하는 결과를 얻을 수 있는 두 가지 신뢰할 수 있는 방법:
1. CROSS APPLY
(SQL Server 2005 이상):
이 접근 방식은 CROSS APPLY
을 사용하여 외부 쿼리와 내부 쿼리를 효율적으로 연관시킵니다.
<code class="language-sql">SELECT Orders.OrderNumber, LineItems2.Quantity, LineItems2.Description FROM Orders CROSS APPLY ( SELECT TOP 1 LineItems.Quantity, LineItems.Description FROM LineItems WHERE LineItems.OrderID = Orders.OrderID ) LineItems2</code>
2. INNER JOIN
(2005년 이전 SQL Server 버전의 경우):
이전 SQL Server 버전의 경우 하위 쿼리가 있는 INNER JOIN
은 동일한 결과를 얻습니다.
<code class="language-sql">SELECT Orders.OrderNumber, LineItems.Quantity, LineItems.Description FROM Orders JOIN LineItems ON LineItems.LineItemGUID = ( SELECT TOP 1 LineItemGUID FROM LineItems WHERE OrderID = Orders.OrderID )</code>
두 방법 모두 TOP 1
를 활용하여 LineItems
에서 첫 번째로 일치하는 행만 선택합니다. 이렇게 하면 데이터 중복이 제거됩니다.
결정적인 결과 보장
결정적으로 내부 ORDER BY
문 내에 SELECT
절이 없으면 "첫 번째" 행은 임의적입니다. 동일한 데이터라도 쿼리를 실행하면 서로 다른 결과가 반환될 수 있습니다. 일관되고 예측 가능한 결과를 보장하려면 항상 내부 쿼리에 ORDER BY
절을 포함하세요. 예:
<code class="language-sql">SELECT TOP 1 LineItems.Quantity, LineItems.Description FROM LineItems WHERE LineItems.OrderID = Orders.OrderID ORDER BY LineItems.SomeColumn -- Add a column to order by</code>
이러한 기술을 보여주는 SQLfiddle 예제를 사용할 수 있습니다(여기서 라이브 SQLfiddle 링크를 생성할 수 없으므로 링크 생략). 실제 사례는 온라인 리소스를 참조하세요.
위 내용은 SQL에서 관련 테이블의 첫 번째 행에 효율적으로 조인하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!