구분자로 들어가있는 데이터 조인 질문 1 4 3,965

by 꼬막 [Oracle 기초] Oracle [2022.09.29 11:49:28]


질문드립니다!! 

 

컬럼에 'CODE1|CODE2|CODE3' 와같은 코드값이 " | " 구분자로 들어갑니다. 

 

이 코드값은 다국어처리와 term 처리를 해주기위해 매핑되는 테이블과 조인을하고싶습니다. 

'코드한글명1,코드한글명2,코드한글명3' 이런식으로 구분자는 , 으로 변경하면서 조인을통해 값을 받아 올 수 있는 방법이 있을까요 ?ㅜㅜ

 

 


 

by pajama [2022.09.29 12:29:35]

아래처럼 변형해서 처리하시려는 걸까요..?

 

SELECT
REGEXP_SUBSTR('code1|code2|code3', '[^|]+', 1, level) AS parts
FROM dual
CONNECT BY REGEXP_SUBSTR('code1|code2|code3', '[^|]+', 1, level) IS NOT NULL;

SELECT 
REGEXP_SUBSTR('코드한글명1,코드한글명2,코드한글명3' , '[^,]+', 1, level) AS parts
FROM dual 
CONNECT BY REGEXP_SUBSTR('코드한글명1,코드한글명2,코드한글명3' , '[^,]+', 1, level) IS NOT NULL;

 


by 꼬막 [2022.09.29 13:09:22]
SELECT 'CODE1' AS COL1
            , A2.NAME
  FROM DUAL A1
           , CODENAME A2
WHERE A1.COL = A2.CODE
 
위처럼 단일건이라면 A2와 조인을 통해 데이터를 받을수 있지만,
데이터가 N건이상이라면 아래와같이 |구분자를통해 넣어주고있습니다..
 
SELECT 'CODE1|CODE2' AS COL1
            , A2.NAME
  FROM DUAL A1
           , CODENAME A2
WHERE A1.COL = A2.CODE
 
이런식인데.. 어떻게 조인을 해야할지 도무지 감이 안잡힙니다 ㅜ 

 


by 마농 [2022.09.29 13:19:21]
WITH t_code AS
(
SELECT 'CODE1' cd, '코드한글명1' nm FROM dual
UNION ALL SELECT 'CODE2', '코드한글명2' FROM dual
UNION ALL SELECT 'CODE3', '코드한글명3' FROM dual
)
, t_data AS
(
SELECT 1 pk, 'CODE1|CODE2|CODE3' cd FROM dual
UNION ALL SELECT 2, 'CODE1|CODE3' FROM dual
UNION ALL SELECT 3, 'CODE3|CODE1' FROM dual
)
SELECT a.pk
     , a.cd
     , LISTAGG(b.nm, ',') WITHIN GROUP(ORDER BY INSTR('|'||a.cd||'|', '|'||b.cd||'|')) nm
  FROM t_data a
     , t_code b
 WHERE INSTR('|'||a.cd||'|', '|'||b.cd||'|') > 0
 GROUP BY a.pk, a.cd
;

 


by 꼬막 [2022.09.29 13:37:05]

감사합니다 선생님 ㅜㅜ 

10g 사용하는바람에 WM_CONCAT으로 변경하였지만 큰 참고 되었습니다.

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