Background Image

FORUM

조회 수 16858 추천 수 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의 릴리스노트를 보니 해결된 문제에 해당 내용이 있네요. 빠른 답변 감사드립니다!

  1. CUBRID 사용자를 위한 DBeaver 도구 출시 안내

  2. 서브쿼리 질문

  3. 큐브리드 매니져에서 정수 쿼리 16진수 표시

  4. 오류구문이 뜹니다.

  5. 로그 분석 툴 이용시 분석 에러발생합니다.

  6. mysql 구문변환

  7. 매니저에 쿼리 오류 메세지가 갑자기 안나옵니다.

  8. data_buffer_page 를 300000 이상으로 늘렸더니

  9. 큐브리드 커넥션 유지 시간

  10. 서브쿼리 ORDERBY_NUM() 최적화 문제

  11. ADO이용시 OLEDB Driver에러

  12. QTADO와 OLEDB사용시 문제

  13. 큐브리드 매니저에서 서브쿼리 날리면 값이 안나오는 문제

  14. 리스트 목록 갯수

  15. Linux Centso5.1에 설치 중입니다.

  16. CUBRID-8.2.1.0215 CentOs5.1에 설치 중입니다.

  17. 대용량 mysql 데이타를 큐브리드 2008 로 마이그레이션 할때

  18. 8.2.1버전에서 SQuirreL SQL Client 접속 가능한가요?

  19. php게시판에 있는 php설치 글에서.<? phpinfo.php ?>사용이 가능한 구문인가요?

  20. cubrid 6.6.0 제공 문의

  21. 문자집합 변경에 대하여

Board Pagination Prev 1 ... 182 183 184 185 186 187 188 189 190 191 ... 213 Next
/ 213

Contact Cubrid

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