2010-04-08 6 views
0

수정하려는 각 행에 불완전한 필드 데이터가있는 테이블이 있습니다.Mysql "safe"merge

  • 필드가있는 경우 :

    mysql> CREATE TABLE test (
         key INT 
         a CHAR(1), 
         b CHAR(1), 
         c CHAR(1), 
        ); 
    mysql> CREATE TABLE test2 (
         key INT 
         a CHAR(1), 
         b CHAR(1), 
         c CHAR(1), 
        ); 
    mysql> INSERT INTO test (1,'','',''); 
    mysql> INSERT INTO test (2,'X','',''); 
    mysql> INSERT INTO test (3,'','Y',''); 
    
    mysql> INSERT INTO test2 (2,'X','','Z'); 
    mysql> INSERT INTO test2 (4,'X','Y','Z'); 
    

    내가 파괴되지 않은 그래서 그 '키'필드를 기준으로 테스트에 TEST2 데이터를 "병합"하고 싶은 : 여기

    는 내 말은 무엇을의 테스트에서 이미 지정된 키에 대해 비어 있지 않은 값이 있으면 유지됩니다.
  • test 필드가 비어 있고 test2의 해당 필드가 비어 있지 않으면 test2의 값은 test의 해당 필드를 주어진 키로 바꿉니다.
  • test 및 test2의 필드가 모두 공백이 아니고 서로 다르면 아무 작업도 수행하지 않습니다. 아무것도 건드리지 않고 테스트 테이블에있는 구멍에 작성 등을

    (1,'','',''); 
    (2,'X','','Z'); 
    (3,'','Y',''); 
    (4,'X','Y','Z'); 
    

    종류 :은 "병합"내가하고자하는 '테스트'테이블 데이터 후

는 다음과 같다합니다.

누구나이 방법을 생각할 수 있습니까?

답변

1

MySQL은 너희들은 믿을 수 있습니다 :이 경우에 대한 특별한 기능이 있습니다

INSERT INTO test2 VALUES (2, 'X', '', 'Z') 
ON DUPLICATE KEY UPDATE a='X', c='Z'; 
INSERT INTO test2 VALUES (4, 'X', 'Y', 'Z') 
ON DUPLICATE KEY UPDATE a='X', b='Y', d='Z'; 
+0

와우! 10 분 이내에 나는 며칠 동안 나를 죽이고있는 문제에 대한 정확한 답을 얻습니다! 감사합니다. WoLPH! 정말 정말 고마워! Paul – KellerPaul

+0

환영합니다 KellerPaul :) 또한 병합없이 삽입하려는 경우 기존 행을 무시하려면 'INSERT IGNORE INTO' – Wolph