CTE로이 문제를 해결하는 방법은 무엇입니까?

롭 마쉬

작업을 함께 연결하는 테이블이 있습니다.

JobToJob
(
   JobToJobId int 
   SourceJobId int
   DestinationJobId int 
)

작업에는 여러 대상 작업 (즉, 하나 이상의 JobToJob 레코드)이있을 수 있지만 소스 작업은 하나만 있습니다. 그래서 이것은 트리 구조를 만듭니다. 루트 레코드는 다른 레코드에 DestinationJobId 항목이없는 레코드로 정의됩니다.

내가 가진 요구 사항은 제공된 작업 ID에 대한 전체 트리를 검색하는 것입니다. 나는 이것을 두 부분으로 나누었습니다.

  1. 주어진 작업 ID에 대한 루트 작업 찾기
  2. 루트 작업 ID에 대한 모든 잎을 검색합니다.

재귀 CTE를 사용하여 이것을 시도해 보았지만 아무데도 얻지 못했습니다. 저장 프로 시저를 사용하여이 작업을 수행 할 수 있다는 것을 알고 있지만 작업 속도를 늦추는 경향이 있으므로이를 피하려고합니다.

나보다 더 재귀적인 CTE 경험을 가진 사람이 이것에 접근하는 가장 좋은 방법에 대한 제안을 받았습니까?

건배,

Rob

로만 세르게 예프

Jobs 테이블이 있기를 바랍니다.

declare @JobId int
;with getAscendants( job, parent, inverseDepth)
as
(
  select jj.DestinationJobId, jj.SourceJobId, 1
  from JobToJob jj 
  where jj.DestinationJobId = @JobId

  union all

  select jj.DestinationJobId, jj.SourceJobId, inverseDepth + 1
  from getAscendants
  join JobToJob jj on jj.DestinationJobId = getAscendants.parent
)
,rootFinder( job)
as
(
  select j.JobId
  from Jobs j
  where j.JobId = coalesce
  (
    (
      select top 1 parent from getAscendants order by inverseDepth desc
    )
    , @JobId
  )
)
,getDescendants( job, parent)
as
(
  select j.JobId, null
  from Jobs j
  cross apply rootFinder 
  where j.JobId = rootFinder.job

  union all

  select jj.DestinationJobId, jj.SourceJobId 
  from getDescendants
  join JobToJob jj on jj.SourceJobId = getDescendants.job
) 
select * from getDescendants

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

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

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

이 문제를 해결하는 방법은 무엇입니까?

이 압축 해제 문제를 해결하는 방법은 무엇입니까?

내 navbar로이 문제를 해결하는 방법은 무엇입니까?

OpenCL이 멈추는 문제를 해결하는 방법은 무엇입니까?

systemd-resolved로 DNS 문제를 해결하는 방법은 무엇입니까?

JSON 로딩 문제를 해결하는 방법은 무엇입니까?

EOF로 fread txt 문제를 해결하는 방법은 무엇입니까?

ElasticSearch 로그인 문제를 해결하는 방법은 무엇입니까?

Flutter Signing App이 문제를 해결하는 방법은 무엇입니까?

이 ArrayList 문제를 해결하는 방법은 무엇입니까?

이 argparse 고정 문제를 해결하는 방법은 무엇입니까?

이 HTML 간격 문제를 해결하는 방법은 무엇입니까?

이 Binary Tree Deserialize 문제를 해결하는 방법은 무엇입니까?

오버레이 문제를 해결하는 방법은 무엇입니까?

DataGridView에서이 문제를 해결하는 방법은 무엇입니까?

이 "환경 개체" 문제를 해결하는 방법은 무엇입니까?

이 _tkinter.TclError 문제를 해결하는 방법은 무엇입니까?

이 캔버스 fillStyle 문제를 해결하는 방법은 무엇입니까?

Cursor 명령을 RestSharp로 이식하는 방법은 무엇입니까? 문제를 해결하는 방법?

이 기호를 해결할 수 없는 문제를 해결하는 방법은 무엇입니까?

동적 프로그래밍 방식을 통해이 문제를 해결하는 방법은 무엇입니까?

이 대리자 이벤트 문제를 해결하거나 해결하는 방법은 무엇입니까?

이 문제를 해결하는 방법은 무엇입니까? 그것은 webpack과 함께입니까?

서비스 surfaceflinger를 기다리는 Android 로이 문제를 해결하는 방법은 무엇입니까?

98 % CPU 사용으로 시작하는 Windows 10 :이 문제를 해결하는 방법은 무엇입니까?

z3py로이 제외 / 포함 문제를 해결하는 방법은 무엇입니까?

이 JQ 문자열 연결 문제를 해결하는 방법은 무엇입니까?

이 최적화 문제를 해결하기 위해 Gurobi를 사용하는 방법은 무엇입니까?

문자열을 datetime으로 변환하는 문제를 해결하는 방법은 무엇입니까?

TOP 리스트

  1. 1

    PrematureCloseException : 연결이 너무 일찍 닫혔습니다.

  2. 2

    MDRotatingPieChart를 회전하면 각도 대신 x / y 위치가 변경됩니다.

  3. 3

    c # 웹 사이트에서 텍스트를 복사하는 방법 (소스 코드 아님)

  4. 4

    jfreecharts에서 x 및 y 축 선을 조정하는 방법

  5. 5

    ArrayBufferLike의 typescript 정의의 깊은 의미

  6. 6

    Ionic 2 로더가 적시에 표시되지 않음

  7. 7

    복사 / 붙여 넣기 비활성화

  8. 8

    Google Play Console에서 '예기치 않은 오류가 발생했습니다. 나중에 다시 시도해주세요. (7100000)'오류를 수정하는 방법은 무엇입니까?

  9. 9

    정점 셰이더에서 카메라에서 개체까지의 XY 거리

  10. 10

    QT Designer를 사용하여 GUI에 이미지 삽입

  11. 11

    java Apache POI Word 기존 테이블 셀 스타일 및 서식이있는 행 삽입

  12. 12

    Kubernetes Horizontal Pod Autoscaler (HPA) 테스트

  13. 13

    Android Kotlin은 다른 활동에서 함수를 호출합니다.

  14. 14

    C # HttpWebRequest 기본 연결이 닫혔습니다. 전송시 예기치 않은 오류가 발생했습니다.

  15. 15

    어떻게 같은 CustomInfoWindow 다른 이벤트를 할 수 있습니다

  16. 16

    rclone으로 원격 디렉토리의 모든 파일을 삭제하는 방법은 무엇입니까?

  17. 17

    dataSnapShot.getValue () 반환 데이터베이스에 그겁니다 데이터 종료 널 (null)

  18. 18

    ORA-12557 TNS : 프로토콜 어댑터를로드 할 수 없습니다

  19. 19

    JNDI를 사용하여 Spring Boot에서 다중 데이터 소스 구성

  20. 20

    다음 컨트롤이 추가되었지만 사용할 수 없습니다.

  21. 21

    C # Asp.net 웹 API-JSON / XML 변환기 API 만들기

뜨겁다태그

보관