Oracle Start With와 MySQL Recursive 0 4 1,901

by hun [SQL Query] 재귀 Start With [2019.10.28 17:02:39]


캡처.PNG (19,836Bytes)
캡처2.PNG (20,088Bytes)
캡처3.PNG (9,984Bytes)

안녕하세요.

제 질문에 시간내주셔서 감사합니다.

현재 Oracle의 START WITH CONNECT BY를 CTE를 사용해서 만들고 있는데 원하는 구조를 어떻게 만들어야할지 잘 모르겠어서 질문 드립니다.

MariaDB에서 Oracle의 scott 계정의 emp 테이블과 동일하게 생성하여 진행하였습니다.

MariaDB의 쿼리는 아래와 같습니다.

WITH RECURSIVE CTE AS(
    SELECT
        1 AS level,
        EMPNO,
        ENAME,
        JOB,
        MGR
    FROM EMP
    WHERE JOB = 'PRESIDENT'
    UNION ALL
    SELECT
        1+level AS level,
        p.EMPNO,
        p.ENAME,
        p.JOB,
        p.MGR
    FROM EMP p
    inner join cte b
    on p.MGR = b.EMPNO
)
select *
from cte

제가 원하는 결과는 두 번째 인데, 실제 결과는 첫 번째 처럼 나오고 있습니다.

쿼리를 어떻게 짜야 두 번째와 같은 결과를 얻을 수 있을까요?

답변해주셔서 감사합니다!

by 마농 [2019.10.28 18:07:00]
WITH RECURSIVE cte AS
(
SELECT 1 AS lv
     , empno
     , ename
     , job
     , mgr
     , CAST(empno AS VARCHAR(99)) x
  FROM emp
 WHERE job = 'PRESIDENT'
 UNION ALL
SELECT b.lv + 1 AS lv
     , p.empno
     , p.ename
     , p.job
     , p.mgr
     , CONCAT(b.x, '-', p.empno) x
  FROM emp p
 INNER JOIN cte b
    ON p.mgr = b.empno
)
SELECT *
  FROM cte
 ORDER BY x
;

 


by hun [2019.10.29 08:59:52]

감사합니다!

MariaDB에서 CAST시 VARCHAR가 없어서 CHAR로 변경하니 정상적으로 동작합니다.

WITH RECURSIVE cte AS
(
SELECT 1 AS lv
     , empno
     , ename
     , job
     , mgr
     , CAST(empno AS char(99)) x
  FROM emp
 WHERE job = 'PRESIDENT'
 UNION
SELECT b.lv + 1 AS lv
     , p.empno
     , p.ename
     , p.job
     , p.mgr
     , CONCAT(b.x, '-', p.empno) x
  FROM emp p
 INNER JOIN cte b
    ON p.mgr = b.empno
)
SELECT *
  FROM cte
 ORDER BY x;

by 마농 [2019.10.29 10:02:37]

1. 저는 MariaDB 10.4 에서 테스트 했는데 Varchar 잘 되네요.
2. Union All 써야 하는데 왜 Union 으로 바꾸셨는지?


by hun [2019.10.29 16:46:25]

1. 저는 MariaDB 10.2 에서 테스트시 Varchar가 오류가 나서 char로 변경하였습니다. varchar 사용시 오류가 발생한 것은 본문에 첨부하였습니다!

2. 다른 방법으로 테스트 하다가 그렇습니다ㅎㅎㅎ

친절히 답변해 주셔서 감사합니다!!!

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