Closed utterances-bot closed 2 years ago
첫번째 쿼리랑 두번째 쿼리가 결과가 동일하게 나오네요.
CREATE TABLE recursion_test
(
id
VARCHAR(45) NULL DEFAULT NULL ,
m_name
VARCHAR(50) NULL DEFAULT NULL,
depth
INT(10) NULL DEFAULT NULL,
parent
VARCHAR(50) NULL DEFAULT NULL,
m_order
VARCHAR(50) NULL DEFAULT NULL
)
ENGINE=InnoDB DEFAULT CHARSET=utf8;
INSERT INTO recursion_test
(id
,m_name
,depth
,parent
,m_order
) VALUES
('ROOT','MENU',0,null,'0'),
('M0','축구',1,'ROOT','0'),
('M1','농구',1,'ROOT','1'),
('M2','야구',1,'ROOT','2'),
('M00','세리에A',2,'M0','0'),
('M01','K-LEAGUE',2,'M0','1'),
('M10','NBA',2,'M1','0'),
('M11','KBL',2,'M1','1'),
('M02','프리메라리그',2,'M0','2'),
('M20','MLB',2,'M2','0'),
('M21','KBO',2,'M2','1');
SET @var = 'ROOT';
WITH RECURSIVE t3 (id, m_name, depth, parent, m_order) AS
( SELECT t1.id, t1.m_name, t1.depth, t1.parent, t1.m_order FROM practice.recursion_test t1 WHERE t1.parent = @var
UNION ALL
SELECT t2.id, t2.m_name, t2.depth, t2.parent, t2.m_order
FROM practice.recursion_test t2
INNER JOIN t3 ON t2.parent = t3.id
)
SELECT * FROM t3
ORDER BY t3.id, t3.m_order
;
아 잘되네요.
Insert db query를 댓글로 답니당.
이거 결국에는 그냥 ID에 알파벳+숫자로 정렬되는 거 아닌가요 ? 계층 필요없이 그냥 select해도 정렬될 거 같은데
(mysql) 재귀쿼리로 계층구조 데이터 표현(id - varchar) | June
재귀쿼리로 계층구조 데이터 표현하기(id(varchar)로) id에 varchar로 계층구조를 담아서 하지 않고 integer로 설계해서 표현하는 설계방법은 여기로. mysql 기준으로 설명 (오라클은 CONNECT BY PRIOR, START WITH를 사용하여 자신의 ID와 연결된 부모 ID를 찾아가 계층적으로 쿼리결과를 뽑을 수 있
https://highjune.dev/database/mysql_recursion_hierachy_query/