> 데이터 베이스 > MySQL 튜토리얼 > CONNECT BY PRIOR 없이 MySQL에서 계층적 데이터를 쿼리하는 방법은 무엇입니까?

CONNECT BY PRIOR 없이 MySQL에서 계층적 데이터를 쿼리하는 방법은 무엇입니까?

Patricia Arquette
풀어 주다: 2025-01-06 13:09:42
원래의
949명이 탐색했습니다.

How to Query Hierarchical Data in MySQL Without CONNECT BY PRIOR?

"Connect By Prior" 없이 MySQL에서 계층적 데이터 쿼리

MySQL에서 명시적인 "Connect By Prior" 절이 없음에도 불구하고 , 재귀적 조합을 사용하여 계층적 데이터를 검색하는 것이 가능합니다. 기술.

재귀 순회 알고리즘

tb_Tree와 같은 계층적 테이블을 재귀적으로 순회하려면 다음 단계를 따르세요.

  1. ParentId가 일치하는 행을 선택하세요. 원하는 루트 노드.
  2. 수집 선택한 행의 ID 값.
  3. 수집된 목록의 각 ID에 대해 1단계와 2단계를 반복합니다.

이 재귀 프로세스는 모든 리프 노드가 식별될 때까지 계속됩니다.

심층기반 접근

트리의 최대 깊이에 따라 테이블을 반복적으로 자체 조인하여 가장 깊은 수준에 도달한 다음 나머지 NULL 값을 필터링할 수 있습니다.

중첩 집합 표현

또는 , 중첩된 집합 표현을 사용하도록 테이블 구조를 수정할 수 있습니다. 여기에는 계층 구조에 있는 각 노드의 왼쪽 및 오른쪽 경계를 나타내는 추가 열을 추가하는 작업이 포함됩니다.

하위 항목 검색을 위한 쿼리 예시

특정 노드의 모든 하위를 검색하려면 Id가 X인 경우 다음 쿼리를 사용합니다.

SELECT * FROM tb_Tree WHERE ParentId IN (
  SELECT Id FROM tb_Tree WHERE ParentId = X
  UNION ALL
  /* Recursive traversal of children */
  SELECT Id FROM tb_Tree WHERE Id IN (
    SELECT Id FROM tb_Tree WHERE ParentId = X
  )
);
로그인 후 복사

이 쿼리는 재귀적으로 순회합니다. 계층 구조, 하위 노드와 관련된 모든 ID 값을 수집합니다.

위 내용은 CONNECT BY PRIOR 없이 MySQL에서 계층적 데이터를 쿼리하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿