안녕하세요.
최대 4 depth 까지 존재하는 카테고리 복사를 하려고 합니다.
테이블의 ID 가 PK+auto incresement 일 때,
카테고리 복사를 하려고 하는데, 현재는 임시 테이블에 일일히 하나씩 조회(?)해 가면서 복사를 하는데,
- 너 부모 카테고리니?
- 자식 카테고리면 부모는 누구야?
- 부모 ID 랑 같이 입력!
순으로 작성을 했습니다. (임시테이블 + while 조합)
작은 양이면 문제가 안되지만, 1천개만 넘어가도 n분이 들어가는 bad 쿼리가 되어버리는데요.
이걸 어떻게 조금 더 빠르게 만들 수 있을까? 에 대한 고민을 하고 있습니다.
cateID int PK, identity (1,1)
UserId varchar (where 구분용)
categoryName nvarchar
parentID INT (cateID 가 들어가는 depth 확인용)
예를 들어 이런 경우라면
foo -> bar userid 로 카테고리를 복사할 경우
select * from table where userid = 'foo'
ID, name, parentID
1 A 0
2 B 0
3 AA 1
4 BB 2
5 BBB 4
6 AAA 3
7 AA1 1
8 BBBB 5
9 BBB1 4
10 AAAA 6
select * from table where userid = 'bar'
11 A 0
12 B 0
13 AA 11
14 BB 12
15 BBB 14
16 AAA 13
17 AA1 11
18 BBBB 15
19 BBB1 14
20 AAAA 16
형태가 나오도록 해야 하는데 이건 데이터가 적어서 이렇게 쉽게 했지만 단위는 천단위~만단위를 동일하게 변경 해야 합니다.
혹시 좋은 방법이 없을까요??
감사합니다.
Comment 1
-
지영아빠
2023.11.19 15:12
cte, bom쿼리를 검색해보세요.
원하는 형태가 없다면 샘플데이터를 주면 출력샘플(글에 적으신)로 만드는 걸 같이 고민할 수 있을 것 같네요.