Background Image

FORUM

조회 수 738 추천 수 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
번호 제목 글쓴이 날짜 조회 수
공지 CUBRID 사용자를 위한 DBeaver 도구 출시 안내 admin 2024.04.23 21
공지 SQLGate for CUBRID 영구 무료 라이선스 제공 file admin 2020.04.09 4452
3991 회원가입이 3명이상 안돼요.. 1 딩이 2010.07.08 7846
3990 회사 서버에 접속을 할려면 설정이 다른가요? 2 후니 2009.07.14 10577
3989 홈경로 databases.txt 질문드립니다 1 큐브리드드 2023.07.17 92
3988 홀따옴표 처리 문의 1 초보 2010.04.15 14679
3987 혼합형 데이터 정렬방법 1 큐키 2021.06.11 85
3986 혼합형 데이터 정렬 방법 1 큐키 2021.06.14 265
3985 혹시 큐브리드매니저 자동완성 끄는 기능 있나요 2 안지민 2012.09.05 6036
3984 혹시 큐브리드 매니져 기본글꼴을 고정폭으로 해주실 생각은 없으신가요... 1 안지민 2012.12.20 5768
3983 혹시 PHP5.3.0 버전에서 모듈 설치되신분 계신가요??? 4 senseplus 2009.07.13 9394
3982 혹시 MMDB 지원하나요? 1 tekkal 2009.01.31 17480
3981 호스트 추가시 발생되는 오류에 대해 문의 합니다. 1 거북이사촌 2015.01.06 5259
3980 호스트 추가 질문입니다. 7 몽유객 2010.12.21 13808
3979 호스트 추가 1 karay2k 2011.12.17 17928
3978 호스트 연결이 안됩니다. 3 file 미드소나 2013.01.01 7752
3977 호스트 연결이 안되요.(비밀번호오류) 2 양희종 2011.09.06 13919
3976 호스트 연결이 무한 로딩도네요 1 file 큐브리드사용자 2022.10.20 119
3975 호스트 연결이 되지 않습니다. 3 file Juooon 2013.07.24 9235
3974 호스트 연결 에러 3 secret PJEPJE 2016.01.28 10
3973 형변환 오류 문의 1 삽질중 2009.12.30 12969
3972 현재 큐브리드 7.1 을 사용하고 있는데요 1 헬리 2009.10.01 8770
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