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 4286
3916 유저생성 함수 반복 실행 시, fatal error발생 2 f0081 2023.11.09 90
3915 11.2버전에서 사용자 스키마에 대해서 궁금한 것이 있습니다. 1 로키 2023.11.08 126
3914 저장프로시저 실행관련 문의 4 f0081 2023.11.08 130
3913 다른 소유자 테이블 검색 권한 2 박혀누 2023.11.08 126
3912 [CUBRID Admin] 사용자의 테이블 권한 편집 1 tree1891 2023.11.06 90
3911 3909번 답변 좀 부탁드립니다. f0081 2023.11.06 86
3910 [CUBRID Admin] 테이블 컬럼 순서 변경 불가 12 tree1891 2023.11.05 169
3909 시스템 카탈로그 조회 외 1 f0081 2023.11.01 108
3908 시리얼 생성 시 class_name, attr_name, started 컬럼 값을 변경하고 싶습니다. 1 file getpost 2023.11.01 99
3907 cubrid 9.3.1 설치해서 원격으로 접속하고자 설치했는데 에러가 뜹니다 3 file Xstar 2023.10.27 91
3906 loaddb 실행 중 발생하는 오류에 대해서 문의 드립니다. 1 file 뚜벅뚜벅 2023.10.19 93
3905 큐브리드 매니서 실행 문의 1 마리오 2023.10.19 89
3904 큐브리드 DB가 실행되지 않는 것 같습니다. 4 file 뚜벅뚜벅 2023.10.18 113
3903 ===<ResultofSELECTCommandinLine1>=== 등의 출력 없이 결과값만 반환받고 싶습니다. 3 f0081 2023.10.18 87
3902 가로 데이터 세로로 조회 6 Ggyak 2023.10.18 109
3901 테이블별 row 개수를 조회하는 쿼리 6 cncn 2023.10.18 104
3900 [ADO.NET] Syntax error: unexpected 6 tree1891 2023.10.17 145
3899 큐브리드매니저 패스워드 변경 문의건 1 file yurrrr 2023.10.16 95
3898 Db프로시져 스케쥴 실행 성공 리포트나 로그 결과른 보고싶습니다 2 Roy 2023.10.16 99
3897 db 데이터용량을 조회하는 쿼리 2 cncn 2023.10.11 108
Board Pagination Prev 1 2 3 4 5 6 7 8 9 10 ... 199 Next
/ 199

Contact Cubrid

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