Background Image

FORUM

조회 수 728 추천 수 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 4255
3856 브로커(CAS)수 질문드립니다! 8 요시니 2023.06.05 149
3855 데이터 이관 문의입니다. 1 kipo0821 2023.05.30 125
3854 8.4.4 charset. Collation 확인 방법 네오랜덤 2023.05.24 175
3853 8.4.4버젼 charset 확인 3 네오랜덤 2023.05.23 182
3852 쿼리 속도 차이 질문 1 하얀미스 2023.05.18 139
3851 spring boot 에서 HikariPool-1 - Driver does not support get/set network timeout for connections. (java.lang.UnsupportedOperationException) 질문 드립니다. 3 kjaminam 2023.05.18 725
3850 cci 프로그래밍에서 DB LINK 관련 문의 4 jjune1206 2023.05.18 123
3849 큐브리드 매니저 실행이 오류 1 file 청주시청 2023.05.18 97
3848 ddl 추출 1 네오랜덤 2023.05.17 95
3847 하나의 쿼리에서 복수 테이블 업데이트 방법 문의 4 도담도담 2023.05.17 122
3846 cubrid driver 설치 문의 1 고구망구망 2023.05.08 424
3845 큐브리드 매니저 접속 이 안됩니다. 확인 요청 드립니다. 1 뿡이 2023.04.28 127
3844 Fk값 가져오기 2 file 네오랜덤 2023.04.24 159
3843 서버 메모리 교체 및 ha 상 데이터 삭제 절차 1 레피엘 2023.04.20 106
3842 java stored procedure 에 loadjava 로 jar 파일 로드 시 java.lang.ClassNotFoundException 에러 문의 3 개미가불쌍해 2023.04.18 138
3841 Cubrid stored procedure 스케쥴 등록 형식 2 Roy 2023.04.17 104
3840 암호화 함수 MDB_ENC 질문입니다 1 BE-DEV 2023.04.17 79
3839 auto_increment 추가 방법 문의 1 부패방지운영팀 2023.04.14 239
3838 CUBRID 사용자 계정 생성 관련 문의 1 몽키스패너 2023.04.14 127
3837 order by 이후 rownum이 의도와 다르게 찍힙니다. 2 바보똥개 2023.04.14 134
Board Pagination Prev 1 2 3 4 5 6 7 8 9 10 11 ... 199 Next
/ 199

Contact Cubrid

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