Background Image

FORUM

조회 수 733 추천 수 0 댓글 8
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄


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

OS
Window10 64bit
CUBRID Ver.
9.3.0
CUBRID TOOL Ver.
11
응용 환경(API)
java, php, odbc 등 입력


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

 

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


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

안녕하세요 
 
질의 관련 질문드립니다

 

1. 하나의 테이블(A)에서 하나의 컬럼(a)를 검색하여
해당 컬럼에 특정 조건을 만족하는 값이 존재한다면,
두번째 테이블(B)에서 A테이블의 a컬럼과 동일한 값이 들어간 B.a 컬럼과 
두번째 테이블(B)의 다른 B.b컬럼을 검색하고
이때, B.b컬럼의 값이 존재할 경우 
A테이블의 a컬럼의 값을 B테이블의 b컬럼의 값으로 변경하고 싶습니다.

여러 개의 값이 존재한다면 모든 값에 맞도록 업데이트 하려고 합니다.

 

혹시 이럴 때는 어떻게 쿼리를 짜야할까요?

 

검색까지는 아래와 같이 성공하였고
업데이트문은 여러가지 방식으로 시도해보고 있는데 다 실패하고 있습니다. 

 

검색 쿼리문(검색은 성공합니다.): 
SELECT B.a B.b 
FROM tableA A INNER JOIN tableB B
ON A.a LIKE '%1234%'
WHERE B.a = A.a 

 

 

실패하는 업데이트 쿼리문 중 하나는 아래와 같습니다:

UPDATE tableA A, tableB B

SET A.a =

   (SELECT B.b FROM table A

   INNER JOIN table B

   ON A.a LIKE '%1234%'

   WHERE B.a = A.a)

 

 


2. 또, 업데이트 할 때 
여러 테이블의 컬럼의 값을 변경하게 된다면, 어떻게 해야할까요?

(위의 상황에서, B테이블의 b컬럼의 값으로 A테이블의 a 컬럼, C테이블의 c컬럼을 변경하고 싶은 경우)

 

 

답변주시면 감사드리겠습니다!!

잘 부탁드립니다. 감사합니다. 

 

 

  • ?
    오명환 2021.06.10 08:56
    (1번 답변) 큐브리드는 9.0이상 버전부터 update 구문에서 multi table을 지원합니다. (https://www.cubrid.org/manual/ko/9.3.0/sql/query/update.html 참고하세요.)
    그래서, 위의 실패한 쿼리를 다음과 같이 수정하시면 수행 가능합니다.

    update A inner join B on A.a = B.a and A.a LIKE '%1234%' set A.a = B.b

    (2번 답변) 위의 수정한 질의처럼 3개의 table을 조인해서 사용하시면 됩니다.

    참고로 현재 올려주신 질의는 join과 좌우절단 like를 사용하는 것이므로 데이타량에의해 쿼리 응답 속도 느려질 수 있습니다.
    join 조건은 index를 통해 꼭 튜닝을 하시고, 좌우절단 like은 index scan을 할 수 없으므로 다른 조건을 통해 결과 좌우절단 like scan 량을 줄이는 것을 권고드립니다.
  • ?
    ots21 2021.07.07 14:42
    안녕하세요, 답변 감사드립니다!!
    덕분에 UPDATE 문 수정하여 정상동작함을 확인하였습니다.
    다만.. 같은 update 질의를 동일한 테이블에서 여러 번 하지는 못하나요?

    한번 update 문을 수행했던 테이블에서 수정이 필요한 데이터를 추가하고
    다시 update 문을 수행하면 수정되는 데이터가 없다고 나옵니다..

    update 문을 질의자동화에 추가하여 주기적으로 변경하려고 했습니다
    답변해주시면 감사드리겠습니다.
  • ?
    오명환 2021.07.07 14:50
    추가하신 데이타와 join update 질의 조건이 안 맞아서 해당 데이타를 못 찾는 것 같습니다.
    우선 join select로 추가하신 데이타가 찾아지는지 확인해보세요.

    같은 update 질의를 동일한 테이블에 여러번 수정해도 됩니다. 해당 조건이 맞으면 update를 수행합니다.
  • ?
    ots21 2021.07.07 15:09

    빠른 답변 감사합니다.
    조건에 맞게는 추가했는데, 검색도 안되고 업데이트도 안되네요..
    조건에 맞게 추가했다고 말씀드리는 이유는, 추가한 데이터의 변경없이
    큐브리드 서비스를 다시시작 후 동일한 질의문을 수행하니 잘 되고 있어서 입니다..
    큐브리드 서비스를 계속 다시시작 하는 것은 어려울 것 같은데, 혹시 다른 방법이 있을까요??
    답변해주시면 감사드리겠습니다.

  • ?
    오명환 2021.07.07 15:33
    올려주신 글로는 어떤 상황인지 정확히 판단이 안됩니다.
    안되는 경우에 대한 테이블 layout, 예제 데이타와 쿼리를 올려주시면 가이드 해드리도록 하겠습니다.
  • ?

    답변 감사합니다. .
    넵. 파일 첨부하였습니다.
    확인부탁드리며 더 필요한 사항 있으신 경우 알려주시면 감사드리겠습니다.

     

    첨부파일에 잘못 기입한 내용이 있어 수정하였습니다.

  • ?
    오명환 2021.07.07 16:41
    파일에 내용을 가지고 다음과 같이 질의를 실행해 보았습니다. (간단히 테스트를 위해 index는 만들지 않았습니다.) 원하시는 형태로 동작되는 것을 확인했습니다.
    혹시 어떤 부분이 이상한건가요 ?

    create table tbla (a int, temp varchar(20), new varchar(20));
    create table tblx (num varchar(20));

    insert into tbla values (1, 'temp-1', 'new-1');
    insert into tbla values (2, 'temp-2', 'new-2');
    insert into tbla values (3, 'temp-3', 'new-3');

    insert into tblx values ('temp-1');
    update tblx x inner join tbla a on x.num = a.temp and x.num like 'temp-%' and a.new is not null set x.num=a.new; <- 방금전에 입력된 tblx의 temp-1가 new-1로 변경
    insert into tblx values ('temp-2');
    update tblx x inner join tbla a on x.num = a.temp and x.num like 'temp-%' and a.new is not null set x.num=a.new; <- 방금전에 입력된 tblx의 temp-2가 new-2로 변경

    select * from tblx;

    === <Result of SELECT Command in Line 1> ===

    num
    ======================
    'new-1'
    'new-2'
  • ?
    ots21 2021.07.07 17:21
    오명환님, 확인해주셔서 감사합니다.
    진행해주신 내용이 제가 한 테스트와 크게 다르지 않은 것을 보아
    제가 다른 부분에서 실수하고 있는 것 같습니다. 조금 더 뜯어보도록 하겠습니다..
    빠르고 자세한 답변 감사드립니다!!

List of Articles
번호 제목 글쓴이 날짜 조회 수
공지 SQLGate for CUBRID 영구 무료 라이선스 제공 file admin 2020.04.09 4444
3967 CUBRID Migration Toolkit "orai18n.jar" 추가 방법 1 가을이아빠 2024.03.07 57
3966 CUBRID 에러 로그 관련 확인 요청 2 jnj570244 2024.03.07 95
3965 DB링크로 조회시 문자타입이 조회되지 않고 있습니다. 2 file 원샷 2024.03.06 91
3964 다른 사용자 계정에서 csql로 localhost 접근 문제 4 가을이아빠 2024.03.05 79
3963 [성능이슈] 큐브리드 함수 사용으로 인한 성능이슈 3 레고 2024.03.04 112
3962 CUBRID 11.2 rpm 설치시 cubrid 계정 패스워드 2 가을이아빠 2024.03.04 54
3961 Cubrid JDBC 버전에 따라 출력되는 결과가 다릅니다. 1 엘L 2024.02.28 86
3960 select 질의문 문의 2 태리 2024.02.26 117
3959 cubrid statdump 기술 문의드립니다. 5 secret 이건우 2024.02.19 11
3958 날짜 형식 변환에 대해서 궁금해서 올립니다. 1 김용용 2024.02.14 56
3957 컬럼의 Enum DataType 가져오는것 문의 3 엘L 2024.01.30 75
3956 Redhat 8버전 tls 1.0 에러 9 11시38분 2024.01.30 120
3955 테이블이 어떤 스키마(데이터베이스)에 속해있는지 알 수 있는 방법이 있나요? 3 엘L 2024.01.29 116
3954 테이블 생성시 REUSE_OID 옵션끄기 문의드립니다 1 원샷 2024.01.25 94
3953 큐브리드 DB에 테이블 생성 후, 저장된 데이터 LIKE 조건 안되는 현상입니다. 1 file 하코 2024.01.24 92
3952 실 ip db서버 이중화 관련 질문 1 zexpand 2024.01.18 91
3951 SQLGate for CUBRID (CUBRID v9.3 and later) 폐쇄망 사용법? 1 임소식 2024.01.18 78
3950 큐브리드 파일 읽기 쓰기 문의 1 임소식 2024.01.18 345
3949 CUBRID Manager 윈도우 버전 배포 해주세요. SQLGate for CUBRID 버그가 많아요. 2 도프 2024.01.17 104
3948 Cubird db 접속 문제 1 file 폰호두 2024.01.17 91
Board Pagination Prev 1 2 3 4 5 6 7 8 9 10 ... 200 Next
/ 200

Contact Cubrid

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