Background Image

FORUM

조회 수 740 추천 수 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
    오명환님, 확인해주셔서 감사합니다.
    진행해주신 내용이 제가 한 테스트와 크게 다르지 않은 것을 보아
    제가 다른 부분에서 실수하고 있는 것 같습니다. 조금 더 뜯어보도록 하겠습니다..
    빠르고 자세한 답변 감사드립니다!!

  1. CUBRID 사용자를 위한 DBeaver 도구 출시 안내

    Date2024.04.23 Byadmin Views48
    read more
  2. SQLGate for CUBRID 영구 무료 라이선스 제공

    Date2020.04.09 Byadmin Views4458
    read more
  3. 저장프로시저 실행관련 문의

    Date2023.11.08 Byf0081 Views138
    Read More
  4. 다른 소유자 테이블 검색 권한

    Date2023.11.08 By박혀누 Views142
    Read More
  5. [CUBRID Admin] 사용자의 테이블 권한 편집

    Date2023.11.06 Bytree1891 Views97
    Read More
  6. 3909번 답변 좀 부탁드립니다.

    Date2023.11.06 Byf0081 Views91
    Read More
  7. [CUBRID Admin] 테이블 컬럼 순서 변경 불가

    Date2023.11.05 Bytree1891 Views178
    Read More
  8. 시스템 카탈로그 조회 외

    Date2023.11.01 Byf0081 Views121
    Read More
  9. 시리얼 생성 시 class_name, attr_name, started 컬럼 값을 변경하고 싶습니다.

    Date2023.11.01 Bygetpost Views111
    Read More
  10. cubrid 9.3.1 설치해서 원격으로 접속하고자 설치했는데 에러가 뜹니다

    Date2023.10.27 ByXstar Views97
    Read More
  11. loaddb 실행 중 발생하는 오류에 대해서 문의 드립니다.

    Date2023.10.19 By뚜벅뚜벅 Views102
    Read More
  12. 큐브리드 매니서 실행 문의

    Date2023.10.19 By마리오 Views96
    Read More
  13. 큐브리드 DB가 실행되지 않는 것 같습니다.

    Date2023.10.18 By뚜벅뚜벅 Views123
    Read More
  14. ===<ResultofSELECTCommandinLine1>=== 등의 출력 없이 결과값만 반환받고 싶습니다.

    Date2023.10.18 Byf0081 Views93
    Read More
  15. 가로 데이터 세로로 조회

    Date2023.10.18 ByGgyak Views120
    Read More
  16. 테이블별 row 개수를 조회하는 쿼리

    Date2023.10.18 Bycncn Views111
    Read More
  17. [ADO.NET] Syntax error: unexpected

    Date2023.10.17 Bytree1891 Views152
    Read More
  18. 큐브리드매니저 패스워드 변경 문의건

    Date2023.10.16 Byyurrrr Views102
    Read More
  19. Db프로시져 스케쥴 실행 성공 리포트나 로그 결과른 보고싶습니다

    Date2023.10.16 ByRoy Views105
    Read More
  20. db 데이터용량을 조회하는 쿼리

    Date2023.10.11 Bycncn Views117
    Read More
  21. 특정 값 우선 정렬

    Date2023.10.11 Bydrunkenascii Views66
    Read More
  22. 이기종간 DB Link 문의 드립니다.

    Date2023.09.26 Bykikiki767 Views104
    Read More
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