ANSI 표준 SQL이 아닌 것은 아닙니다. 그건 사실이 아니에요. 왼쪽 외부 조인을 수행하고 가능한 최대 깊이를 충당하기에 충분하지만 최대 깊이를 제한하지 않고 많은 조인을 포함하지 않으면 항상 작동하지는 않습니다.
행 세트가 충분히 작 으면 (예 : 1000 개 미만), 모두 검색하여 알아낼 수 있습니다. 모든 읽기에서 단일 읽기 탐색보다 빠릅니다.
부모 탐색을 일괄 처리 할 수 있습니다. 다음과 같은 검색어를 사용하십시오.
SELECT t1.id id1, t1.parent parent1,
t2.id id2, t2.parent parent2,
t3.id id3, t3.parent parent3,
t4.id id4, t4.parent parent4,
t5.id id5, t5.parent parent5
FROM mytable t1
LEFT OUTER JOIN mytable t2 ON t1.parent = t2.id
LEFT OUTER JOIN mytable t3 ON t2.parent = t3.id
LEFT OUTER JOIN mytable t4 ON t3.parent = t4.id
LEFT OUTER JOIN mytable t5 ON t4.parent = t5.id
WHERE t1.id = 1234
원하는 번호로 확장하십시오. 마지막으로 검색된 상위가 null이 아니면 트리의 맨 위에 있지 않으므로 쿼리를 다시 실행하십시오. 이렇게하면 1-2 왕복으로 갈아 타야합니다.
그 외에도 ID의 해당 데이터를 인코딩하는 방법을 살펴볼 수 있습니다. 이것은 권장하지 않지만 각 노드의 어린이 수가 100 명이라고 가정하면 ID가 10030711 인 노드의 경로는 10 -> 03 -> 07 -> 11입니다. 물론 다른 문제가 있습니다 (예 : max ID 길이) 그리고 물론 그것은 해킹입니다.
SQL의 계층 적 데이터에는 두 가지 기본 모델이 있다는 점도 유의해야합니다. 인접 목록 및 중첩 세트. 귀하의 방식 (꽤 일반적인)은 인접 세트입니다. 중첩 된 세트는 실제로 이러한 상황에 도움이되지 않으며 삽입 작업을 복잡하게합니다.
불행하게도 행 내 세트가 합리적으로 크고도 지속적으로 성장하고 다음 링크를 참조하십시오. –