얻어낸 결과로 또다른 결과를 찾고 싶습니다. 0 2 1,197

by 곡예사 [MySQL] mysql [2022.09.21 13:53:11]


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 상의 후드티 겨울

 

질문이 다소 바보같은 질문일 수 있으니 양해 부탁드리겠습니다..

감사합니다!

by 마농 [2022.09.21 14:17:50]
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
;

 


by 곡예사 [2022.09.22 09:12:39]

마농님 매번 정말 감사드립니다.

덕분에 랜더링 속도를 절반이상 가까지 줄일 수 있었습니다.

정말 감사드립니다 !

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입