[쿼리질문] 동적 like를 사용하여 항목과 건 수 출력하기... 1 5 2,123

by 물개 [2013.11.27 13:44:41]


현재 테이블이 2개 있습니다.
A 테이블은 특정 이름이 들어 있습니다.

A 테이블
1열 | 2열
=======
**** | 0001  -- 과일
0001 | apple
0001 | orange
0001 | pineapple
0001 | lemon

이런 형태이고

B테이블은
1열
=========
"apple을 좋아함"
"orange를 좋아함"
"peanut을 좋아함"
"apple을 좋아함"
"dates를 좋아함"
(무엇을 좋아함이란 문자는 임의로 넣었습니다. LIKE를 쓸 수 밖에 없는 상황입니다.)

이런식으로 값이 있습니다.

A열을 통해서  1열이 "0001"에 해당 되는 2열의 값을 가지고

Like를 통해  B테이블에서 1열의 건수를 추출하고자 합니다.

REGEXP_LIKE 함수를 사용해 동적으로 LIKE 문으로 조회하는 것은 하였지만

블랙리스트로 쓰이는 것이 몇 건인지 알고 싶어서 글을 남기게 되었습니다.


결과 로는
A테이블의 모든 내용 항목이 나오고 옆에 건수가 나와야 합니다.

결과
1열 | 2열
=====
apple | 2
orange | 1
pineapple | 0
lemon | 0

읽어 주셔서 감사합니다.
by 용근님 [2013.11.27 14:23:15]

select a.2열, count (*) from a, b
where a.2열 like b.1열 || '%'
group by a.2열

by 물개 [2013.11.27 14:30:49]
빠른 답변 감사합니다.

b테이블에서 동적으로 like문 검사를 하게 되는데

이 like 문으로 쓰이는 명칭에 따라 건 수를 아는 게 어렵습니다. ㅠ


by 물개 [2013.12.05 11:47:41]
지금보니 정답을 알려주셨군요 ㅠ..

그 당시에 적용시켜 돌렸을 때

에러 나서 깊이 생각하지 못하고 넘어갔었습니다;

쑥스럽습니다 ㅠ

아무쪼록 답변 감사드립니다.

by 마농 [2013.11.27 14:36:02]
WITH a AS
(
SELECT '0001' cd, 'apple' nm FROM dual
UNION ALL SELECT '0001', 'orange'    FROM dual
UNION ALL SELECT '0001', 'pineapple' FROM dual
UNION ALL SELECT '0001', 'lemon'     FROM dual
)
, b AS
(
SELECT 'apple을 좋아함' v FROM dual
UNION ALL SELECT 'orange를 좋아함' FROM dual
UNION ALL SELECT 'peanut을 좋아함' FROM dual
UNION ALL SELECT 'apple을 좋아함'  FROM dual
UNION ALL SELECT 'dates를 좋아함'  FROM dual
)
SELECT a.nm
     , COUNT(b.v) cnt
  FROM a, b
 WHERE b.v(+) LIKE a.nm||'%'
 GROUP BY a.nm
;

by 물개 [2013.11.27 15:00:19]
헐~~~
대박!!!

마농님 감사합니다.. ㅎ

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