특정 수준에 도달 할 때까지 아래에서 위로 SQL 계층을 탐색합니다.

오웬 79

제 3 자 웹 서비스에서 긁어 모으고있는 수백 개의 서비스에 대한 테이블이 있습니다. 서비스에는 내가 받고있는 수백만 개의 기호가 있습니다.

계층 구조는 본질적으로 이것입니다.

root
|_service1
| |_service1/sub1*
| |_service1/sub2
| |_service1/sub3
| |_service1/sub4
| | |_service1/sub4/sub1
| |   |_**service1/sub4/sub1/leaf1**
| |
| |_service1/sub5
|
|_service2
  |_service2/sub1 
  |_service2/sub2
  |_service2/sub3

그래서 내가 달성하려는 것은-잎에 대한 Id가 주어지면 분기가 isActive 인 것을 찾을 때까지 트리를 작업하고 그 값을 반환하고 싶습니다.

이 예에서 나는 잎의 활성 서비스를 찾으려면, /service1/sub4/sub1/leaf1이 경우에service1/sub1

지금까지는 Common Table Expression을 사용하여 위에서 아래로 작업하고 해당 분기 아래에있는 잎에 추가 ActiveServiceId 열을 설정했습니다. 수백만 개의 기호가 매우 오래 실행되는 프로세스로 바뀝니다.

나는 기호의 아주 작은 하위 집합으로 만 작업하고 있습니다 (비록 어떤 기호가 필요한지 모르지만 모두 필요함). 따라서 쿼리 당시 알려진 리프 ID는 수백에 불과합니다.

도움을 줄 수있는 모든 사람을 돕기 위해이 계층 구조 를 반영 하는 SQLFiddle만들었습니다.

현재 접근 방식을 추가로 설명하는 업데이트 . 이것이 service1새로운 활성 서비스 로 결정된 경우 -모든 하위 분기의 service1 아래에있는 잎은 service1로 버블 링되어야하며 모든 하위 분기를 재설정하여 활성으로 표시되지 않도록합니다.

크레이그 맨슨

이 데이터를 저장하기 위해 중첩 세트를 사용하는 것이 유용 할 수 있습니다.

http://en.wikipedia.org/wiki/Nested_set_model

이전에이 방법을 사용하여 데이터베이스에 트리 데이터를 저장했으며 부모 아래의 모든 노드에 속하는 데이터를 쿼리하는 데 유용하다는 것을 알았습니다.

중첩 된 집합에 저장된 데이터를 사용하면 문제에 대한 해결책은 다음과 같습니다.

SELECT s.ID
FROM TreeTable s
WHERE s.L = (SELECT Max(t.L)
            FROM TreeTable t, TreeTable LeafNode
            WHERE t.isActive = true
              AND t.L < LeafNode.L
              AND t.R > LeafNode.R
              AND LeafNode.ID = ?)

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

Swift에서 특정 숫자에 도달 할 때까지 Array의 값으로 합계 연산을 수행하는 방법은 무엇입니까?

분류에서Dev

특정 임계 값에 도달 할 때까지 값 합계 필터링

분류에서Dev

jquery는 특정 양에 도달 할 때까지 요소를 추가합니다.

분류에서Dev

jquery는 특정 양에 도달 할 때까지 요소를 추가합니다.

분류에서Dev

특정 단어가 포함 된 줄에 도달 할 때까지 줄 범위를 어떻게 선택합니까?

분류에서Dev

Python은 도달 할 수있을 때까지 호스트를 계속 핑합니다. 콘솔에서 처음으로 도달 할 수없는 인쇄

분류에서Dev

특정 값에 도달 할 때까지 범위를 채우십시오.

분류에서Dev

기준에 도달 할 때까지 행을 계산 한 다음 다시 시작합니다.

분류에서Dev

쉘 스크립트를 실행할 때 순서대로 모두 입력하지 않고도 특정 위치 매개 변수를 전달할 수 있습니까?

분류에서Dev

Excel에서 특정 값에 도달 할 때까지 값 사이의 열에있는 셀 수 계산

분류에서Dev

특정 속성을 가진 부품에 도달 할 때까지 외부 부품으로 이동

분류에서Dev

GitLab CI / CD에서 특정 파일을 아티팩트로 전달할 때 왜 무시합니까?

분류에서Dev

6면 주사위 하나로 특정 숫자에 도달 할 수있는 가능한 방법을 계산합니다.

분류에서Dev

한 자릿수에 도달 할 때까지 자릿수 합계

분류에서Dev

이진 변수를 기반으로 ggplot2의 선 그래프 아래에서 특정 영역에 색을 지정할 수 있습니까?

분류에서Dev

값에 도달 할 때까지 합계 한 다음 중지

분류에서Dev

특정 크기에 도달 할 때까지 파일을 폴더로 이동하는 방법은 무엇입니까?

분류에서Dev

Rails는 속성이 수량에 도달 할 때까지 무작위 모델을 쿼리합니다.

분류에서Dev

특정 크기에 도달 할 때까지 파일에 쓰기

분류에서Dev

jquery에서 테이블 수준 계층을 어떻게 할 수 있습니까?

분류에서Dev

프로그래밍 방식으로 datagridview를 아래쪽에 도달 할 때까지 증분 단위로 스크롤 한 다음 다시 맨 위로 스크롤

분류에서Dev

아래로 스크롤 할 때 페이지의 나머지 부분에 가려지는 탐색 표시 줄을 수정했습니다.

분류에서Dev

트리 구조에서 특정 노드의 수준 (위에서 아래로, 오름차순, 각각 두 자식)을 찾는 방법은 무엇입니까?

분류에서Dev

다른 열의 뱅크 셀에 도달 할 때까지 열 범위의 두 값을 테스트합니다.

분류에서Dev

최대한 알고있는 특정 프로그램 실행을 위해 JVM 호출 스택 깊이에 도달 할 수있는 방법이 있습니까?

분류에서Dev

UINavigationBar에서 탐색 항목을 설정할 때 충돌이 발생합니다.

분류에서Dev

다른 특정 수준의 쿼리를 위해 SQL에 선택적으로 준비된 문이 있습니까?

분류에서Dev

특정 문자 정규식에 도달 할 때까지 문자열 끝의 문자를 바꿉니다.

분류에서Dev

특정 수에 도달 할 때까지 스트림에 새 줄 추가

Related 관련 기사

  1. 1

    Swift에서 특정 숫자에 도달 할 때까지 Array의 값으로 합계 연산을 수행하는 방법은 무엇입니까?

  2. 2

    특정 임계 값에 도달 할 때까지 값 합계 필터링

  3. 3

    jquery는 특정 양에 도달 할 때까지 요소를 추가합니다.

  4. 4

    jquery는 특정 양에 도달 할 때까지 요소를 추가합니다.

  5. 5

    특정 단어가 포함 된 줄에 도달 할 때까지 줄 범위를 어떻게 선택합니까?

  6. 6

    Python은 도달 할 수있을 때까지 호스트를 계속 핑합니다. 콘솔에서 처음으로 도달 할 수없는 인쇄

  7. 7

    특정 값에 도달 할 때까지 범위를 채우십시오.

  8. 8

    기준에 도달 할 때까지 행을 계산 한 다음 다시 시작합니다.

  9. 9

    쉘 스크립트를 실행할 때 순서대로 모두 입력하지 않고도 특정 위치 매개 변수를 전달할 수 있습니까?

  10. 10

    Excel에서 특정 값에 도달 할 때까지 값 사이의 열에있는 셀 수 계산

  11. 11

    특정 속성을 가진 부품에 도달 할 때까지 외부 부품으로 이동

  12. 12

    GitLab CI / CD에서 특정 파일을 아티팩트로 전달할 때 왜 무시합니까?

  13. 13

    6면 주사위 하나로 특정 숫자에 도달 할 수있는 가능한 방법을 계산합니다.

  14. 14

    한 자릿수에 도달 할 때까지 자릿수 합계

  15. 15

    이진 변수를 기반으로 ggplot2의 선 그래프 아래에서 특정 영역에 색을 지정할 수 있습니까?

  16. 16

    값에 도달 할 때까지 합계 한 다음 중지

  17. 17

    특정 크기에 도달 할 때까지 파일을 폴더로 이동하는 방법은 무엇입니까?

  18. 18

    Rails는 속성이 수량에 도달 할 때까지 무작위 모델을 쿼리합니다.

  19. 19

    특정 크기에 도달 할 때까지 파일에 쓰기

  20. 20

    jquery에서 테이블 수준 계층을 어떻게 할 수 있습니까?

  21. 21

    프로그래밍 방식으로 datagridview를 아래쪽에 도달 할 때까지 증분 단위로 스크롤 한 다음 다시 맨 위로 스크롤

  22. 22

    아래로 스크롤 할 때 페이지의 나머지 부분에 가려지는 탐색 표시 줄을 수정했습니다.

  23. 23

    트리 구조에서 특정 노드의 수준 (위에서 아래로, 오름차순, 각각 두 자식)을 찾는 방법은 무엇입니까?

  24. 24

    다른 열의 뱅크 셀에 도달 할 때까지 열 범위의 두 값을 테스트합니다.

  25. 25

    최대한 알고있는 특정 프로그램 실행을 위해 JVM 호출 스택 깊이에 도달 할 수있는 방법이 있습니까?

  26. 26

    UINavigationBar에서 탐색 항목을 설정할 때 충돌이 발생합니다.

  27. 27

    다른 특정 수준의 쿼리를 위해 SQL에 선택적으로 준비된 문이 있습니까?

  28. 28

    특정 문자 정규식에 도달 할 때까지 문자열 끝의 문자를 바꿉니다.

  29. 29

    특정 수에 도달 할 때까지 스트림에 새 줄 추가

뜨겁다태그

보관