조인 질문드립니다! 4

by 생택쥐포도 [Oracle 기초] [2022.02.22 14:24:29]


 

A테이블

A컬럼
ABC_A
ACC_A
AC_A
BAC_A
BAA_C
CC_A

 

B테이블

B테이블 A컬럼 B테이블 B컬럼 B테이블 C컬럼
ABC 감자 강원도
ACC 고구마 강원도
ACC 사과 충청도
BAC 딸기 충청도
BAA 포도 서울
CC 포도 서울

 

A와 B를 조인할때 A의 A컬럼에 B테이블의 A컬럼 LIKE 문으로 조인을 걸어오고싶은데

앞자리가 2개 3개 유동적입니다 이경우 어떻게 해야하나요

by 마농 [2022.02.22 14:38:00]

뒷자리는 1자리 고정인가요?
B 에 ACC 가 두개인데? 하나는 AC 일 것 같네요.


by 생택쥐포도 [2022.02.22 15:09:09]

1.뒷자리도 여러자리로 유동적입니다 ㅠ

2. 맞습니다.


by 동동동 [2022.02.22 14:50:22]
WITH TA AS (
SELECT 'ABC_A' A_A FROM DUAL UNION ALL
SELECT 'ACC_A' A_A FROM DUAL UNION ALL
SELECT 'AC_A'  A_A FROM DUAL UNION ALL
SELECT 'BAC_A' A_A FROM DUAL UNION ALL
SELECT 'BAA_C' A_A FROM DUAL UNION ALL
SELECT 'CC_A'  A_A FROM DUAL
)
, 
TB AS (
SELECT 'ABC' B_A , '감자'   B_B,	'강원도' B_C FROM DUAL UNION ALL
SELECT 'ACC' B_A , '고구마' B_B,	'강원도' B_C FROM DUAL UNION ALL
SELECT 'ACC' B_A , '사과'   B_B,	'충청도' B_C FROM DUAL UNION ALL
SELECT 'BAC' B_A , '딸기'   B_B,	'충청도' B_C FROM DUAL UNION ALL
SELECT 'BAA' B_A , '포도'   B_B,	'서울  ' B_C FROM DUAL UNION ALL
SELECT 'CC'  B_A , '포도'   B_B,	'서울  ' B_C FROM DUAL
)

SELECT * FROM TA, TB
WHERE INSTR(TA.A_A, TB.B_A) > 0;

이렇게 하면 되지 않을까요?

 


by 마농 [2022.02.22 15:10:34]
WITH ta AS
(
SELECT 'ABC_A' a FROM dual
UNION ALL SELECT 'ACC_A' FROM dual
UNION ALL SELECT 'AC_A'  FROM dual
UNION ALL SELECT 'BAC_A' FROM dual
UNION ALL SELECT 'BAA_C' FROM dual
UNION ALL SELECT 'CC_A'  FROM dual
)
, tb AS
(
SELECT 'ABC' a, '감자' b, '강원도' c FROM dual
UNION ALL SELECT 'ACC', '고구마', '강원도' FROM dual
UNION ALL SELECT 'AC' , '사과'  , '충청도' FROM dual -- ACC가 중복이라 AC 로 바꿈.
UNION ALL SELECT 'BAC', '딸기'  , '충청도' FROM dual
UNION ALL SELECT 'BAA', '포도'  , '서울'   FROM dual
UNION ALL SELECT 'CC' , '포도'  , '서울'   FROM dual
)
SELECT *
  FROM ta a
     , tb b
-- WHERE a.a LIKE b.a || '_%'                      -- LIKE 오답
 WHERE a.a LIKE b.a || '#_%' ESCAPE '#'          -- ESCAPE
-- WHERE INSTR(a.a, b.a) = 1                       -- INSTR 오답
-- WHERE INSTR(a.a, b.a || '_') = 1                -- INSTR
-- WHERE SUBSTR(a.a, 1, INSTR(a.a, '_') - 1) = b.a -- 잘라서 비교
-- WHERE REGEXP_LIKE(a.a, '^' || b.a || '_.+')     -- 정규식
;

 

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