IN 연산식의 서브 쿼리에 대한 질문입니다.

by 너랑이마녀 posted Nov 13, 2015

* 질문 등록 시 다음의 내용을 꼭 기입하여 주세요.
OS
Window7 64bit
CUBRID Ver.
CUBRID 9.2 (9.2.0.0155) (64bit release build for Windows_NT) (Sep 26 2013 21:32:31)
CUBRID TOOL Ver.
CUBRID Manager 2014.11 빌드 0651 (64bit)
응용 환경(API)
java

* CUBRID 응용 오류, SQL 오류 또는 SQL 튜닝 관련된 문의는 반드시 다음의 내용을 추가해 주세요. 비밀글이나 비밀 댓글도 가능합니다.
* 저희가 상황을 이해하고, 재현이 가능해야 알 수 있는 문제들이 많습니다. 가능한 정보/정황들을 부탁합니다.
에러 내용 및 재현 방법 재현 가능한 Source와 SQL
관련 테이블(인덱스, 키정보 포함) 정보 CUBRID 홈 디렉토리 아래 log 디렉토리 압축


-------------- 아래에 질문 사항을 기입해 주세요. ------------------------------------------------------------------------

안녕하세요?

제가 IN 연산식을 사용하는 중 발생한 의문점이 있어서 문의 드립니다.

 

table에 Auto Incrememt로 1부터 1씩 증가되는 값인 id 컬럼이 있고, 이 값을 ROWNUM으로 잘라 특정 부분만 사용하려고 합니다.

의문이 가는 부분은 아래와 같습니다.

IN (SELECT id FROM table WHERE ROWNUM 1 BETWEEN 5 ORDER BY id DESC)

 

'SELECT id FROM table WHERE ROWNUM 1 BETWEEN 5 ORDER BY id DESC'를 실행한 결과는 {14, 15, 16, 17, 18}인데,

실제로 IN으로 사용하면 {1, 2, 3, 4, 5}로 반환되는 결과가 나옵니다.

IN 연산식에 사용하는 서브 쿼리에는 ORDER BY 절이 제대로 동작하지 않는 것 인가요?

 

만약 ORDER BY절이 제대로 동작하지 않는다면,

CONNECT BY를 사용할 때 ROWNUM으로 상위 컬럼의 수만 조절하고 싶을 시에 사용할 수 있는 것이 있나요?

table에 id 컬럼과 above_id 컬럼이 있습니다.

id는 1부터 1씩 증가되는 값을 가지고, above_id는 NULL이거나 특정 id 값을 가집니다.

 

아래와 같은 START WITH .... CONNECT BY 절을 가진 쿼리가 있습니다.

START WITH above_id IS NULL
CONNECT BY above_id= PRIOR id

ORDER SIBLINGS BY id

 

id의 값을 ROWNUM이 1에서 5까지 조절하되 딸려있는 하위 로우의 수는 조절하지 않고 싶습니다.

이런 쿼리가 가능할까요?