table_a
| categoryCode | categoryName |
| 001 | 상의 |
| 001001 | 후드티 |
| 001001002 | 겨울 |
table_b
| itemNo | categoryCode |
| 100 | 001001002 |
| 200 | 001001002 |
솔직히 이게 가능할지 저도 상상이 안되긴하지만.. 조언을 얻어보고자 이렇게 질문을 올려봅니다..
SELECT b.* FROM table_b AS b JOIN table_a AS a ON b.categoryCode = a.categoryCode WHERE b.categoryCode = '001001002'
이렇게 했을 때
[결과]
| itemNo | categoryCode |
| 100 | 001001002 |
| 200 | 001001002 |
위 처럼 나온다고 한다면 제가 생각하는 방향은
결과에서 받은 categoryCode "001001002"를 "001", "001", "002" 이런식으로 세등분을하고 그 등분된 값들을 table_a에 있는 categoryCode와 비교해서 AS categoryName1, AS categoryName2, AS categoryName3 이런식으로 한 결과에 같이 받아보고 싶습니다.
예를들어
| No | categoryCode | categoryName1 | categoryName2 | categoryName3 |
| 100 | 001001002 | 상의 | 후드티 | 겨울 |
| 200 | 001001002 | 상의 | 후드티 | 겨울 |
질문이 다소 바보같은 질문일 수 있으니 양해 부탁드리겠습니다..
감사합니다!
WITH table_a AS
(
SELECT '001' categoryCode, '상의' categoryName
UNION ALL SELECT '001001', '후드티'
UNION ALL SELECT '001001002', '겨울'
)
, table_b AS
(
SELECT 100 itemNo, '001001002' categoryCode
UNION ALL SELECT 200, '001001002'
)
-- 1. 코드 테이블과 세번 조인하는 방법
SELECT m.itemNo
, m.categoryCode
, c1.categoryName categoryName1
, c2.categoryName categoryName2
, c3.categoryName categoryName3
FROM table_b m
LEFT OUTER JOIN table_a c1 ON c1.categoryCode = SUBSTR(m.categoryCode, 1, 3)
LEFT OUTER JOIN table_a c2 ON c2.categoryCode = SUBSTR(m.categoryCode, 1, 6)
LEFT OUTER JOIN table_a c3 ON c3.categoryCode = SUBSTR(m.categoryCode, 1, 9)
WHERE m.categoryCode = '001001002'
;
-- 2. 한번에 조인(등호가 아닌 LIKE 조건) 후 그룹바이 하는 방법
SELECT m.itemNo
, m.categoryCode
, MIN(CASE LENGTH(c.categoryCode) WHEN 3 THEN c.categoryName END) categoryName1
, MIN(CASE LENGTH(c.categoryCode) WHEN 6 THEN c.categoryName END) categoryName2
, MIN(CASE LENGTH(c.categoryCode) WHEN 9 THEN c.categoryName END) categoryName3
FROM table_b m
LEFT OUTER JOIN table_a c
-- ON m.categoryCode LIKE CONCAT(c.categoryCode, '%')
ON INSTR(m.categoryCode, c.categoryCode) = 1
WHERE m.categoryCode = '001001002'
GROUP BY m.itemNo, m.categoryCode
;
마농님 매번 정말 감사드립니다.
덕분에 랜더링 속도를 절반이상 가까지 줄일 수 있었습니다.
정말 감사드립니다 !