Background Image

FORUM

조회 수 13998 추천 수 0 댓글 2
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄
서브쿼리에 정렬된 값의 순서에 맞춰 필터링된 결과를 바탕으로 전체 쿼리 결과를 생성하고자 할 경우, 의도하지 않은 방향으로 쿼리 최적화가 이루어지는 것 같습니다. 즉 다음과 같은 쿼리가 있을 때,

select x.* from (
    select t.* from
    (
        select 1 v, 1 c from db_root
        union all select 2, 1 from db_root
        union all select 3, 0 from db_root
        union all select 4, 1 from db_root
        union all select 5, 1 from db_root
    ) t
    order by t.v for orderby_num() between 2 and 4
) x
where x.c = 1

이 쿼리에서 의도한 결과는 다음과 같습니다.
v c
2 1
4 1
그러나 의도와는 다르게 다음의 결과가 도출됩니다.
v c
2 1
4 1
5 1

즉, 서브쿼리의 ORDER BY 구문이 최적화를 거치면서 서브쿼리에 귀속하지않고 최종 결과에 대한 정렬 동작으로 잘못 처리되는 것 같습니다.

이 문제를 해결하기 위한 한가지 우회방법으로 서브쿼리에 불필요한 컬럼 정의를 넣는 방법인데요, 다음처럼 쿼리를 변경하는 것 입니다.

select x.* from (
    select t.*, orderby_num() from
    (
        select 1 v, 1 c from db_root
        union all select 2, 1 from db_root
        union all select 3, 0 from db_root
        union all select 4, 1 from db_root
        union all select 5, 1 from db_root
    ) t
    order by t.v for orderby_num() between 2 and 4
) x
where x.c = 1


그리고 일부 DBMS의 경우 서브쿼리에 ORDER BY 구문을 사용하는데 있어 제약이 있는 경우가 있어서 해당 내용에 대해 온라인 도큐먼트를 참고하려 했는데요, SELECT 구문의 서브쿼리 정의에는 <query statement>라는 모호한 내용만 있습니다. 도큐먼트 어디에도 <query statement>에 대한 정의가 없는데요, 제 생각에는 <query state>로 변경하는 것이 정황상 맞는 것 같습니다.

고쳐주세요!

  • ?
    cubebridge 2010.01.29 21:23
    지금 테스트 해보았습니다.
    사용하신 제품의 정확한 버전(cubrid_rel명령어로 확인이 가능합니다.)을 알려 주시기 부탁드립니다.
    현재 위의 쿼리 대로 R2.1버전에서 확인한 결과 기대하신 값과 동일한 값을 얻었습니다.
    확인 부탁드립니다.
  • ?
    asteroid 2010.01.30 00:10
    R2.0 입니다. R2.1의 릴리스노트를 보니 해결된 문제에 해당 내용이 있네요. 빠른 답변 감사드립니다!

List of Articles
번호 제목 글쓴이 날짜 조회 수
공지 CUBRID 사용자를 위한 DBeaver 도구 출시 안내 admin 2024.04.23 51
공지 SQLGate for CUBRID 영구 무료 라이선스 제공 file admin 2020.04.09 4458
3514 pk명 변경 2 쩡저리 2013.10.28 14008
» 서브쿼리 ORDERBY_NUM() 최적화 문제 2 asteroid 2010.01.29 13998
3512 큐브리드를 HA 구성 문의드립니다..여러개가 가능할까요? 1 라면 2016.10.21 13981
3511 데이터베이스 uload, load는 성공했으나 데이터 한글이... 3 조상필 2009.11.08 13978
3510 조인 업데이트 구문 문의 1 초보 2010.04.09 13972
3509 안녕하세요~ insert시 자동 증가값을 알고 싶어서 이렇게 글을 올립니다. 2 yongsu9 2011.05.21 13972
3508 DB 자동 시작 다시 한번더 질문 드립니다. 6 file 이석희 2009.02.25 13962
3507 DB 백업시 와 DB 생성시 에러입니다. 7 노랑배 2010.09.02 13945
3506 서버 연결중 연결 대기 시간이 초과하였습니다. 1 남자 2013.12.25 13931
3505 함수/프로시저 설정 문제 3 동훈이 2016.09.01 13925
3504 MS-SQL 2008 R2에서 연결된 서버로 등록하는 방법이 있나요? 1 file idonot 2013.01.16 13920
3503 호스트 연결이 안되요.(비밀번호오류) 2 양희종 2011.09.06 13919
3502 테이블 삭제가 안됩니다. 3 소금인형 2016.09.02 13907
3501 Navicat 에서 사용할수 있나요? 1 뛰다가쿵했져 2013.08.12 13906
3500 큐브리드 2008에서 모든 테이블 한번에 삭제 하는 쿼리는 어떻게 될까요? 2 헬리 2009.10.24 13896
3499 함수 등록한 수 쿼리문에서 사용하면 에러나는데 뭐가 문제인거죠? 3 어려운큐브 2012.05.26 13893
3498 cubrid manager에서 DB 권한 2 2~40자? 2~40byte? 2009.02.07 13883
3497 연결(Connection)을 얻을 수 없습니다. 브로커와 서버의 구동 상태를 점검하십시오. 이 에러가 납니다 3 블루토토 2011.06.22 13869
3496 demodb 암호를 모르겠네요-ㅅ-;; 2 세이브 2010.07.16 13862
3495 큐브릐드 함수/프로시져 java class 만들기 1 태태리 2016.09.08 13832
Board Pagination Prev 1 ... 20 21 22 23 24 25 26 27 28 29 ... 200 Next
/ 200

Contact Cubrid

대표전화 070-4077-2110 / 기술문의 070-4077-2113 / 영업문의 070-4077-2112 / Email. contact_at_cubrid.com
Contact Sales