cubrid 업데이트 후 쿼리 관련 문의

by 오수섭 posted Oct 02, 2024


* 질문 등록 시 다음의 내용을 꼭 기입하여 주세요.

OS
Rocky linux 8.10 64bit
CUBRID Ver.
CUBRID 11.3 (11.3.1.1142-bee7aa8)
CUBRID TOOL Ver.
SQLGate For CUBRID 9.19.0.0
응용 환경(API)
java


* CUBRID 응용 오류, SQL 오류 또는 SQL 튜닝 관련된 문의는 반드시 다음의 내용을 추가해 주세요. 비밀글이나 비밀 댓글도 가능합니다.
* 저희가 상황을 이해하고, 재현이 가능해야 알 수 있는 문제들이 많습니다. 가능한 정보/정황들을 부탁합니다.

 

에러 내용 및 재현 방법 재현 가능한 Source와 SQL
관련 테이블(인덱스, 키정보 포함) 정보 CUBRID 홈 디렉토리 아래 log 디렉토리 압축


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

기존 CUBRID 9.3 (9.3.6.0002) 버전에서 신규 Linux에 CUBRID 11.3을 설치하고 데이터 unloaddb / loaddb 작업을 통해서 데이터를 이관하였습니다.

 

이관된 데이터에는 테이블 별로 확인 결과 특이사항은 없었습니다.

 

그런데

 

기존 버전에서는 A테이블, B테이블, C테이블에 대해서

 

A테이블 INNER JOIN B테이블 on A테이블.A컬럼 = B테이블.A컬럼

           LEFT OUTER JOIN C테이블 on B테이블.B컬럼 = C테이블.C컬럼이 쿼리가 정상적으로 작동하지만

11버전에서는 에러가 발생합니다.

 

3개의 테이블에 대한 Join 절이 INNER 와 LEFT OUTER 조인은 혼용으로 사용 불가능 한가요?

 

발생하는 에러는

Error : [-494] Semantic: before '  B ON A.identifier = B.identifier
            LEFT OUTER JOI...'
Outer join query optimization failed. select [B].[class_code], [C].[name],  trim(both  from [C].[gcode]), case when [C].[useage]<>'Y' then 0 else [B].[useage] end from  inner join [itfind.publication_class] [B] left outer join [itfind.publication_code] [C] on [B].[class_code]=[C].[code] where [B].[identifier]= ?:0  group by [B].[class_code], [C].[name], [C].[gcode], [C].[useage], [B].[useage]?193="ko_KR";194="ko_KR";249="Asia/Seoul";user=0|897|3
[CAS INFO-172.16.120.228:30000,4,287519].

 

 

 

* 실제 쿼리  *

 

 SELECT   B.class_code  AS id ,
          C.name        AS title ,
          TRIM(C.gcode) AS groupCode ,
          CASE
                   WHEN C.useage != 'Y'
                   THEN 0
                   ELSE B.useage
          END AS aaaa
 FROM     publication_master A
          INNER JOIN publication_class B
          ON       A.identifier = B.identifier
          LEFT OUTER JOIN publication_code C
          ON       B.class_code = C.code
 WHERE    1                     =1
 AND      A.identifier          = '02-004-240926-000015'
 GROUP BY B.class_code,
          C.name,
          C.gcode,
          C.useage,
          B.useage