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 136
공지 SQLGate for CUBRID 영구 무료 라이선스 제공 file admin 2020.04.09 4477
1125 [급]Cubrid메니저에서 Unlod 후 load시 오류 3 file 별솔아범 2011.07.15 23907
1124 [개선요청] 데이터베이스 복구 문제 개선이 필요할 것 같습니다.. 5 secret 스마트 2011.01.04 49
1123 [replication] 성능에 대한 질문입니다. 2 kkckc 2009.02.10 16669
1122 [mac os] cubrid manager 오류 문의 4 file 망고라떼 2022.08.01 215
1121 [java]supportsGetGeneratedKeys 함수 이상 동작 문의 2 큐브리드하자 2013.07.19 7880
1120 [java] 두개의 PreparedStatement 할당후 close 시 문제 2 cuins 2011.07.27 10829
1119 [emerg] 629#0 큐브리드 서비스 시작안됨 3 secret chocob 2014.10.13 7
1118 [cubrid backup or restore] 질문 사항 1 완이예염 2013.06.14 10843
1117 [cubrid 9.3] database에 설정된 timezone을 얻어오는법 질문입니다. 2 smoh 2020.05.11 146
1116 [PHP]CUBRID 연결 문제 6 php_user2 2016.01.29 6901
1115 [HA구성] master 서버 DOWN의 경우 4 큐스코 2015.12.02 6246
1114 [Cubrid HA] restoreslave 사용할 경우 Master/Slave 경로를 반드시 동일하게 맞춰야하나요? 1 큐브짱 2022.05.06 72
1113 [Cubrid 9.3] POSIX ERROR 문의 1 vasconcelos 2018.09.06 360
1112 [CUBRID Migration Toolkit 11.0-i386] 압축 해제 후 오류 1 jeinhe 2022.09.07 73
1111 [CUBRID Admin] 테이블 컬럼 순서 변경 불가 12 tree1891 2023.11.05 179
1110 [CUBRID Admin] 사용자의 테이블 권한 편집 1 tree1891 2023.11.06 98
1109 [CUBRID Admin] ENUM 데이터 내보내기 1 tree1891 2023.11.14 111
1108 [ADO.NET] Syntax error: unexpected 6 tree1891 2023.10.17 153
1107 [-830]Cannot allocate query entry any more. Maximun allocatable entries are 100 1 dasomoh 2021.01.07 225
1106 Your transaction (index 4, dba@LoveME|3952) has been unilaterally aborted by the system.큐브리드 로그파일도 같이 넣었어요.. 1 지니 2009.09.08 28019
Board Pagination Prev 1 ... 140 141 142 143 144 145 146 147 148 149 ... 201 Next
/ 201

Contact Cubrid

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