의 cte order에서 * 선택 * 재귀의 기본 케이스는 제품에 일치하지 않는 경우입니다.이 경우 자체 그룹을 형성합니다. 이것은 CTE의 첫 번째 부분에서 포착됩니다.
별개의 선택 m1.product_id as group_id, m1.product_id 일치 M1 왼쪽 결합은 M2와 일치합니다 m1.product_id = m2.matching_product_id 여기서 m2.matching_product_id는 nullCTE의 재귀 부분은 각 그룹의 모든 일치 제품을 찾습니다. 이 일치하는 제품을 그룹에 반복적으로 추가합니다.
select c.group_id, M.matching_product_id cte에서 c 매치에 가입 m on c.product_id = m.product_id
WITH CTE AS ( SELECT DISTINCT M1.Product_ID AS Group_ID, M1.Product_ID FROM matches M1 LEFT JOIN matches M2 ON M1.Product_Id = M2.matching_Product_Id WHERE M2.matching_Product_Id IS NULL UNION ALL SELECT C.Group_ID, M.matching_Product_Id FROM CTE C JOIN matches M ON C.Product_ID = M.Product_ID ) SELECT * FROM CTE ORDER BY Group_ID마지막으로, 마지막으로, 우리는 "group_id"열로 CTE를 정렬하여 계층 적 순서를 검색 할 수 있습니다. 계층 적 관계는 "Group_id"열에 의해 캡처되어 각 행이 별개의 제품 그룹을 반영합니다.
WITH CTE AS ( SELECT DISTINCT M1.Product_ID AS Group_ID, M1.Product_ID FROM matches M1 LEFT JOIN matches M2 ON M1.Product_Id = M2.matching_Product_Id WHERE M2.matching_Product_Id IS NULL UNION ALL SELECT C.Group_ID, M.matching_Product_Id FROM CTE C JOIN matches M ON C.Product_ID = M.Product_ID ) SELECT * FROM CTE ORDER BY Group_IDSQL Server의 재귀 기능을 활용하여 복잡한 데이터베이스 구조에서 복잡한 계층 적 패턴 및 그룹 관련 데이터를 효율적으로 추출 할 수 있습니다.
.
부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.
Copyright© 2022 湘ICP备2022001581号-3