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 51
공지 SQLGate for CUBRID 영구 무료 라이선스 제공 file admin 2020.04.09 4458
1694 Failed to connect to database server, 'dbname', on the following host(s) 3 뽀다구 2013.12.06 15467
1693 다시 문의 드립니다/.. 6 secret 오니오니 2013.12.06 13
1692 이중환 관련 질문 드립니다. 2 jojosale 2013.12.05 8402
1691 csql -u -p -i DB명 캐릭터 셋 설정 1 쩡저리 2013.12.05 10136
1690 배치 진행시 에러 발생 4 카이사르 2013.12.03 17464
1689 select update 쿼리 문의 드립니다. 4 신나여 2013.11.29 26065
1688 cubrid 2008 r4.3.1008.jar 란 파일이 있나요? 1 rex 2013.11.29 9743
1687 큐브리드 포트 설정 질문 드립니다. 1 secret 지나가는 2013.11.29 6
1686 tray icon 실행여부 문의 1 기정아빠 2013.11.23 12766
1685 답변 부탁드립니다 _ _) 1 secret 오니오니 2013.11.23 8
1684 간단한 사용자 함수 문의 1 기정아빠 2013.11.23 8992
1683 버전에 따른 statdump 사용 2 secret 오니오니 2013.11.22 7
1682 tray error 발생 문의 1 file 기정아빠 2013.11.22 11739
1681 아카이브 로그 자동 삭제 및 볼륨 자동 생성 문의 1 소라게 2013.11.22 11105
1680 DateTime 타입의 컬럼 데이트 불러오기 2 여긴어디나는누구 2013.11.21 12955
1679 큐브리드 토드로 접근하고 싶은데 가능한가요? 1 신나여 2013.11.20 13061
1678 php5.2 / 윈도우 64bit / 큐브리드 9.2 에맞는 php드라이버는 구할 수 없나요 ? 1 kkndo2 2013.11.16 10233
1677 오라클의 Aggregation Function(집합 함수) 관련 문의 2 샤방석이 2013.11.14 24635
1676 큐브리드에서 함수와 프로시저의 차이?? 2 루피 2013.11.13 13750
1675 DB명_TXXXXX 임시파일이 생기는 경우는 뭐죠? 1 kimsuny 2013.11.12 10849
Board Pagination Prev 1 ... 111 112 113 114 115 116 117 118 119 120 ... 200 Next
/ 200

Contact Cubrid

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