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 ;