오라클쿼리 -> mssql 쿼리 변경.. 이건 어떻게 해야할까요? 0 1 924

by 실베 [2018.08.20 14:06:25]


with tree as
      (
      select *
      from edm_tree
      )
      select *  from edm_outsource a, tree
      
      WHERE  t_category = 'P'
      and a.comp_id(+) = tree.pcom_id
      start with pid='0'
      connect by PRIOR tid = pid
      order SIBLINGS by sort_num,tname

 

다음과같은 쿼리를 mssql 에서 쓰게 바꿔야하는데요.

with를 이용한 가상테이블을 이미 써야하는 상황에서  start with 재귀쿼리를 넣어야하다보니 난감하네요....

 

by 마농 [2018.08.20 15:22:00]

원본쿼리 자체도 문제가 있어 보입니다.
 - 아우터 조인을 사용한 이유가 불분명하고
 - Select 리스트에 컬럼을 명시하지 않고 * 를 사용한 것도 의도가 불분명합니다.
 - 쿼리에 사용된 컬럼 앞에 알리아스가 없어 어느 테이블의 컬럼인지 알 수 없으며
 - 카테고리 조건을 계층 조건(start with, connect by)이 아닌 where 조건에 준것이 문제있어 보입니다.
 - With 절은 굳이 왜 사용했는지 모르겠구요.
문제 있어 보이는 쿼리를 변환해봐야 문제가 그대로 따라 올 것 같아서 변환해 드리기가 난감하네요.
 - 오라클 Start with, Connect by 를 이용한 계층 쿼리는
 - MSSQL 에서는 WITH (CTE) 를 이용한 재귀쿼리 형태로 변환 가능합니다.
 - 다만 Order Siblings by 구문은 따로 없어 정렬키를 조합하여 만들어 내야 합니다.
 - 그러려면 sort_num 의 자료형이나 최대값 등을 알아야 할 것 같습니다.
 - 위에 있는 불명확한 문제점들도 명확하게 풀어야 할 것 같구요.

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입