안녕하세요.
제 질문에 시간내주셔서 감사합니다.
현재 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
제가 원하는 결과는 두 번째 인데, 실제 결과는 첫 번째 처럼 나오고 있습니다.
쿼리를 어떻게 짜야 두 번째와 같은 결과를 얻을 수 있을까요?
답변해주셔서 감사합니다!
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 ;
감사합니다!
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;