[MariaDB] WITH RECURSIVE 구문 사용 시 Table doesn't exist in engine 에러 해결

Shyuuuuni·2022년 5월 19일
0
post-thumbnail

Table 'STOREDB.category' doesn't exist in engine

에러 코드:

WITH RECURSIVE rec_category AS
(
(SELECT id
FROM category
WHERE id = 2)
UNION ALL
(SELECT t2.id
FROM rec_category AS t1, category AS t2
WHERE t1.id = t2.parent_id)
)

결과:

[2022-05-19 18:43:47] [42S02][1932] Table 'STOREDB.category' doesn't exist in engine

문제 상황

스마트스토어 데이터베이스(STOREDB) 의 카테고리(category) 컬럼에서 상위 카테고리 속성(parent_id) 을 가지고 있어서, 어떤 카테고리가 주어졌을 때, 해당 카테고리와 그 하위 카테고리를 모두 조회하는 쿼리를 작성하려고 했다.

WITH RECURSIVE 라는 구문이 있어서 래퍼런스를 보고 문제 코드와 같이 구현해서 실행시켰다.

category 테이블 DDL :

CREATE TABLE IF NOT EXISTS `category`
(
    `id`          bigint(20)  NOT NULL AUTO_INCREMENT,
    `parent_id`   bigint(20),
    `store_id`    bigint(20)  NOT NULL,
    `name`        varchar(30) NOT NULL,
    `level`       int(4)      NOT NULL,
    `use_yn`      char(1)     NOT NULL,
    `creator_id`  varchar(25) NOT NULL,
    `modifier_id` varchar(25) NOT NULL,
    `created_at`  datetime    NOT NULL,
    `modified_at` datetime    NOT NULL,
    PRIMARY KEY (`id`),
    KEY `index_2` (`store_id`),
    KEY `index_3` (`parent_id`)
);

Trouble Shooting

실행 결과 아래와 같은 에러메세지를 출력하면서 제대로 출력이 되지 않았다.

[2022-05-19 18:43:47] [42S02][1932] Table 'STOREDB.category' doesn't exist in engine

이와 관련해 해당 에러코드를 검색해봤는데, 나의 상황과는 비슷한 상황이 아니라고 판단했다.

왜냐하면 SELECT * FROM category 와 같은 다른 쿼리에서는 위의 에러메세지가 발생하지 않기 때문이다.

해결 방법

분명히 STOREDB 라는 데이터베이스에 category 라는 테이블이 있는데 에러메세지가 발생하는지 이해가 되지 않아서 조금 더 명확히 해보자 라는 생각으로 테이블 명 앞에 데이터베이스명을 명시해줬다.

개선 코드 :

WITH RECURSIVE rec_category AS
(
(SELECT id
FROM STOREDB.category
WHERE id = 2)
UNION ALL
(SELECT t2.id
FROM rec_category AS t1, STOREDB.category AS t2
WHERE t1.id = t2.parent_id)
)
SELECT * FROM rec_category;

결과 :

위와 같이 데이터베이스 이름을 명시했더니 에러가 해결되었다.

개선 이전의 코드를 MySQL을 사용하는 지인의 환경에서 실행했을 때에는 에러 메세지가 발생하지 않았는데, 아마도 환경의 문제거나 MariaDB의 문제인 것 같다.

아무튼 해결되어서 다행이다!

profile
배짱개미 개발자 김승현입니다 🖐

0개의 댓글