Background Image

FORUM

조회 수 12970 추천 수 0 댓글 7
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄
insert into pjs(id, [name])
select a.hostname, a.[alias]  from ivu_t_ast_hwsvr a
on DUPLICATE KEY UPDATE [name] =  a.[alias];

pk 는 id 입니다. 

아시다시피.. on duplicate key update 를 써서, pk에 위반이 되면, insert 가 아닌 update 를 하고 싶습니다.

그런데, select 해가지고.. 들어가는 데이터는 update를 할수 없더라구요. 위와 같은 쿼리로 말이죠.. 

혹시 방법이 있는지... 알고싶습니다.
  • ?
    seongjoon 2011.10.26 08:30

    안녕하세요.

    큐브리드를 사용해 주셔서 감사합니다. 문의하신 내용에 대하여 답변을 준비중이오니, 조금만 기다려 주시면 감사하겠습니다.

  • ?
    정만영 2011.10.26 18:53

    안녕하세요.

    문의하신  DUPLICATE KEY UPDATE 사용은 CUBRID2008R3.0부터 가능하며  http://www.cubrid.com/zbxe/70586  FAQ를 참조세요.

  • ?
    초식곰 2011.10.26 19:01

    3.0부터 지원되는거 알고 있구요. 

    INSERT INTO a_tbl VALUES(1, 'aaa', '222-2222') ON DUPLICATE KEY UPDATE phone = '222-2222';


    이렇게 update구문에 그냥 상수로 저렇게 넣으면 들어가는것도 알고 있습니다.


    그렇지만.. 제가 질문한 내용을 보시면, insert 를 select구문으로 했을때, select 데이터중에서, pk랑 비교해서 없는건 insert , pk랑 비교해서 값이 있는건 update를 하고 싶습니다..


    그런데, 위의 질문과 같이 하면 a.[alias] 가 정의되어 있지 않다고 나옵니다...

  • ?
    clazzart 2011.10.26 19:21
    아래처럼 REPLACE를 써서 구현할 수 있을 듯 싶습니다.

    replace into pjs (id, [name])
    select a.hostname, a.[alias] from ivu_t_ast_hwsvr a;

  • ?
    초식곰 2011.10.26 19:24

    replace를 사용하면 update시.. 명시하지 않는 컬럼에 대해서는 모두 null로 대체되더라구요.. 전 기존의 데이터는 그대로 있고, 명시한 컬럼에 대해서만 update를 하고 싶습니다.

  • ?
    clazzart 2011.10.26 23:39

    네. replace 문은 기존 레코드를 삭제하고 새로 입력하기 때문에 replace 문에서 언급하지 않는다면 default value로 채우게 됩니다.

    따라서 NULL이 들어가게 된 것이구요. 


    지금 개발 중인 merge 문을 사용하면 가능해질 것 같은데, 

    현재 버전에서 쿼리 하나로 해결한다면 그래도 replace 밖에 없어 보입니다. 아니면 로직으로 풀어서 써야 할 것 같구요.

    번거롭지만 아래처럼 나머지 컬럼들의 값을 뽑는 subquery를 써서 채워주는 방법을 쓰면 될 것 같습니다.


    replace into pjs (id, [name], c)

    select a.hostname, a.[name] , (select c from pjs where id = a.hostname) from ivu_t_ast_hwsvr a;


  • ?
    초식곰 2011.10.27 00:10

    그렇군요. 빨리 merge 도 개발이 되었으면 좋겠습니다. 감사합니다.


List of Articles
번호 제목 글쓴이 날짜 조회 수
공지 CUBRID 사용자를 위한 DBeaver 도구 출시 안내 admin 2024.04.23 33
공지 SQLGate for CUBRID 영구 무료 라이선스 제공 file admin 2020.04.09 4458
1113 전에 조인 관련 비슷한 질문을 올렸는데도 응용을 하지 못해 쿼리를 올립니다. 3 하루야 2011.11.17 12407
1112 큐브리드 매니저, 쿼리브라우저 차이점 문의 1 jyuvenia 2011.11.12 13568
1111 php 모듈 로드가 안됩니다. 3 김우람 2011.11.11 14352
1110 데이타 처리 속도 문제가 있습니다. 2 pdk24 2011.11.11 11712
1109 4.0 최초 설치후 DB 구동 불가 증상 7 reerror 2011.11.10 11196
1108 4.0 마이그레이션 중 스키마 로드 오류 9 reerror 2011.11.10 18171
1107 실행 오류 :-46 (Internal error: slot 3 on page 4231 of volume) 3 file reerror 2011.11.09 26849
1106 증분백업 복구가 잘 않되고 있습니다. 3 reerror 2011.11.08 11508
1105 리눅스서버에 설치된 cubrid삭제후 로그인할때마다 에러메시지가 나옵니다.(11/06=>관련 추가질문 올림) 4 secret 어려운큐브 2011.11.05 13
1104 1대의 서버에 버젼이 다른 cubrid를 설치하려고 합니다. 1 secret 어려운큐브 2011.11.03 14
1103 델파이 ADOStoredProcedure 컴포넌트에서 큐브리드저장함수의 리턴값을 받고싶습니다. 2 wolf 2011.11.03 21625
1102 Stored procedure execute error: 자바 저장프로시저 관련오류입니다. 8 wolf 2011.11.01 21797
1101 실시간 Insert처리 1 file 동해아빠 2011.10.29 12444
1100 큐브리드 버전 선택 문의 1 유니콘 2011.10.29 36237
1099 페이징과 전체 카운트 쿼리 가져올 수 있도록 해주세요.ㅠㅠ 1 마산이프로 2011.10.29 30076
1098 질의자동화 관련하여 문의드립니다. 4 ........ 2011.10.28 9080
1097 질의 자동화 실행 오류 4 hoops11 2011.10.26 8121
» on duplicate key update 에 대해서.. 7 초식곰 2011.10.26 12970
1095 java store procedure 실행시 "Java VM is not running" 오류 3 jetli_2012 2011.10.25 14087
1094 테이블 생성시 컬럼추가에 있는 컬럼종류에 대해 궁금합니다. 2 존케이 2011.10.22 8712
Board Pagination Prev 1 ... 140 141 142 143 144 145 146 147 148 149 ... 200 Next
/ 200

Contact Cubrid

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