퀘리 IN 조건에 Select 조회시 0 3 4,886

by 손님 in select [2010.11.09 11:44:21]



퀘리 사용시
select * from emp
 where dept cd in (select deptcd from k_dept);

이런식으로 사용을 많이 하겠는데요...
select deptcd from k_dept
이렇게 조회를 하나면
aaa
bbb
ccc
이렇게 하나의 단일행들이 여러개 나오는 경우 입니다.

하지만
select deptcd from k_dept 결과물이
aaa,bbb,ccc,ddd
이렇게 여러부서를 하나의 행의 데이타로 표현되게 했다면
이와 같은 경우는 어떻게 처리를 해야 할까요?

퀘리로 처리하는 방법을 알고 싶습니다.
도움 부탁합니다.

추운 날씨에 감기 조심하세요...
by 마농 [2010.11.09 12:50:19]
1. Like 로 비교
WHERE (SELECT ','||deptcd||',' FROM k_dept) LIKE '%,'||deptcd||',%'

2. 여러행으로 변경
WHERE deptcd IN
(
SELECT REGEXP_SUBSTR(deptcd, '[^,]+', 1, LEVEL) deptcd
FROM k_dept
CONNECT BY LEVEL <= LENGTH(deptcd) - LENGTH(REPLACE(deptcd,',')) + 1
)

by 손님 [2010.11.09 13:44:11]
답변 감사합니니다...하지만...오라클 버젼이 9i라서...REGEXP_SUBSTR 기능은 사용이 안되네요...

by 마농 [2010.11.09 14:09:53]
SELECT SUBSTR(deptcd
, INSTR(','||deptcd, ',', 1, level)
, INSTR(deptcd||',', ',', 1, level)
- INSTR(','||deptcd, ',', 1, level)
) deptcd
FROM k_dept
CONNECT BY LEVEL <= LENGTH(deptcd) - LENGTH(REPLACE(deptcd,',')) + 1
댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입