SQL 조인을 첫 번째 관련 행으로 제한
SQL에서 여러 테이블을 효율적으로 조인하는 것이 중요하지만 때로는 관련 테이블의 첫 번째 행만 필요한 경우도 있습니다. 이 문서에서는 일대다 관계를 처리할 때 중복 행을 방지하면서 조인을 단일 행으로 제한하는 방법을 보여줍니다.
일반적인 시나리오를 살펴보겠습니다.
Orders
과 LineItems
두 개의 테이블이 있습니다. 대부분의 주문에는 하나의 품목이 있지만 일부 주문에는 여러 품목이 있을 수 있습니다. 여러 품목이 있는 경우 표준 INNER JOIN
을 사용하면 주문 행이 중복됩니다.
이를 방지하기 위해 주문당 첫 번째 LineItems
행에만 조인을 제한합니다. 두 가지 효과적인 방법은 다음과 같습니다.
CROSS APPLY 사용(SQL Server 2005 이상):
이 접근 방식은 더 깔끔하고 읽기 쉬운 솔루션을 제공합니다.
<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>
하위 쿼리를 사용하여 내부 조인 사용(SQL Server 2005 이전):
이전 SQL Server 버전의 경우 이 방법을 사용하면 동일한 결과를 얻을 수 있습니다.
<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
을 ORDER BY
없이 사용하면 비결정적 결과가 생성됩니다. 특정 행을 일관되게 선택하려면 항상 내부 쿼리에 ORDER BY
절을 포함하여 원하는 정렬 기준을 지정하세요.
위 내용은 SQL 조인을 관련 테이블의 첫 번째 행으로만 제한하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!