SELECT IN 사용시 문제점 0 4 1,734

by lovely랑 [2010.04.19 11:45:48]


안녕하세요

다름이 아니라 IN 사용시에 대해 질문드릴것이 있어 글을 남깁니다.

SELECT * FROM TEMP  IN ('123,'111','222');

이렇게 사용하는것이 IN의 사용법인것으로 알고 있습니다.

만약

서로다른 TableSpace에서 조회해야하는 경우가 발생시  저렇게 in문을 걸고 싶습니다.

서로다른 TableSpace이기 때문에 조인이 되지 않구요 한쪽 TableSpace의 데이터를 받아와

다른쪽 TableSpace에 IN으로 비교하고 싶습니다.

A tableSpace 에서 조회한 결과를 List로 받아와서 123,111,222 이런 형식의 문자열로 넣은뒤에

select * from temp in (?) ;

이렇게 ?에 preparestatement를 주니 먹히질 않는군요~~

어떤 방법으로 조회해야할지 좀 막막한데요~ 아마 문자열로 인식하여 '123,111,222' 이렇게

인식하는 것 같습니다. 혹시 고수님들께서 좋은 방법을 아시는 분은 답변 부탁드립니다.
by v상이v [2010.04.19 12:36:45]
WITH a AS (
SELECT '1' a FROM dual UNION ALL
SELECT '2' a FROM dual UNION ALL
SELECT '3' a FROM dual UNION ALL
SELECT '4' a FROM dual UNION ALL
SELECT '5' a FROM dual
),
b AS (
SELECT '1' a, 'a' b FROM dual UNION ALL
SELECT '2' a, 'b' b FROM dual UNION ALL
SELECT '3' a, 'c' b FROM dual
)
SELECT *
FROM a
WHERE a IN (SELECT a FROM b)

원하시는게 이런것...인지...?

by v상이v [2010.04.19 12:37:04]
바로 IN 절 안에 SELECT 문을 넣어주시면 됩니다...

by 현 [2010.04.19 13:03:44]
서로다른 TableSpace에서 조회해야하는 경우 라는 것이 어떤 경우를 말하는 것일까요?

by 마농 [2010.04.19 13:33:49]
테이블 스페이스라는 것은 테이블을 구별하는 구분자가 될 수 없습니다.
테이블을 소유한 유저나, 오라클 서버(인스턴스)로 구별해야 합니다.

1. 같은 인스턴스 안의 다른 유저
- 조회 권한을 주면 쿼리로 다른 유저의 테이블 조회 가능(select * from 유저.테이블)

2. 서로 다른 인스턴스의 경우
- 상대 서버의 계정을 알고 있다면 db_link를 생성해서 조회 가능(select * from 테이블@디비링크명)

3. 권한부여나 디비링크 사용없이 위와 같은 방법으로 해결하고자 한다면?
- 조회조건으로 받아온 문자열을 구분자로 구분하여 조건으로 사용
SELECT * FROM 테이블
WHERE 코드 IN
(
SELECT REGEXP_SUBSTR(v, '[^,]+', 1, LEVEL) v
FROM (SELECT '123,111,222' v FROM dual)
CONNECT BY LEVEL <= LENGTH(v) - LENGTH(REPLACE(v,',')) + 1
)
;
-- 문자열 그대로를 이용하는 방법
SELECT * FROM 테이블
WHERE ','||'123,111,222'||',' LIKE '%,'||코드||',%'
;
댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입