Oracle CONNECT BY 구문 Mysql 쿼리로 변환 0 4 9,776

by 요궁 [MySQL] [2016.07.04 18:34:29]


오라클의 아래 계층형 쿼리 를  MYSQL의 쿼리로 변환이 가능할까요??

다른 예제를 찾아 해봣는데   function을 이용해서 하는것 뿐이라서  여쭤봅니다.

원쿼리로 뽑을수 있는 방법이 있을까요??

SELECT A.*
            ,LEVEL
       FROM (             
        SELECT 
           ITEM    
          ,PARENT 
        FROM TABLE_NAME    
            ) A
        START WITH PARENT IS NULL
        CONNECT BY PRIOR ITEM = PARENT 
        ORDER BY LEVEL

 

 

 

by jkson [2016.07.04 18:58:59]

마농님이 dbguide.net에 재귀쿼리로 connect by 문 구현한 전문가컬럼이 있는데

읽어보시려면 가입하셔야할 거예요.

http://www.dbguide.net/knowledge.db?cmd=view&boardUid=186796&boardConfigUid=19&boardStep=&categoryUid=205

대강의 내용은

아래와 같은 구문이

SELECT empno
     , ename
     , mgr
     , LEVEL lv
     , CONNECT_BY_ROOT(ename) root
     , SYS_CONNECT_BY_PATH(ename, '-') path
     , ROWNUM ord
  FROM emp
 START WITH mgr IS NULL
 CONNECT BY PRIOR empno = mgr
 ORDER SIBLINGS BY empno
;

아래와 같이 구현가능하다 하는 겁니다.

WITH t1(empno, ename, mgr, lv, root, path) AS
(
SELECT empno, ename, mgr
     , 1 lv
     , ename root
     , ename path
  FROM emp
 WHERE mgr IS NULL                    -- START WITH mgr IS NULL
 UNION ALL
SELECT c.empno
     , c.ename
     , c.mgr
     , p.lv + 1 lv                    -- LEVEL
     , p.root                         -- CONNECT_BY_ROOT(ename)
     , p.path ||'-'|| c.ename path    -- SYS_CONNCET)BY_PATH(ename)
  FROM emp c
 INNER JOIN t1 p
    ON p.empno = c.mgr                -- CONNECT BY PRIOR empno = mgr
)
SEARCH DEPTH FIRST BY empno SET ord   -- ORDER SIBLINGS BY empno
SELECT *
  FROM t1
;

이 자리를 빌어 유용한 정보를 날마다 공유해주시는 마농님께 감사의 말씀을 올립니다^0^


by 마농 [2016.07.04 19:15:06]

MSSQL 에서는 되지만 MySQL 은 안된다는....


by jkson [2016.07.04 19:17:23]

으헛; MySQL은 안 되는군요~ 전에 컬럼 읽을 때 MSSQL도 가능하다는 글 보고 신기했는데-0- MySQL은 재귀 구문 자체가 없나보군요?


by 마농 [2016.07.05 08:13:06]
SELECT 1 lv
     , t1.item
     , t1.parent
  FROM table_name t1
 WHERE t1.parent IS NULL
 UNION ALL
SELECT  2 lv
     , t2.item
     , t2.parent
  FROM table_name t1
     , table_name t2
 WHERE t1.parent IS NULL
   AND t2.parent = t1.item
 UNION ALL
SELECT  3 lv
     , t3.item
     , t3.parent
  FROM table_name t1
     , table_name t2
     , table_name t3
 WHERE t1.parent IS NULL
   AND t2.parent = t1.item
   AND t3.parent = t2.item
 UNION ALL
SELECT  4 lv
     , t4.item
     , t4.parent
  FROM table_name t1
     , table_name t2
     , table_name t3
     , table_name t4
 WHERE t1.parent IS NULL
   AND t2.parent = t1.item
   AND t3.parent = t2.item
   AND t4.parent = t3.item
;

 

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