2015-01-21 2 views
0

테이블에 고유 값이 있으면 업데이트 할 수 있지만 추가하지 않으면 추가 할 수 있습니까? 내 SQL 여기에, OBJECTID 내 기본 키입니다. 나는 두 개의 데이터 테이블을 비교하고, 그 레코드를 테이블에 추가하는 중이다. LatestData 여기서 OctoberExport의 값은 SeptExport의 값과 일치하지 않는다.고유 값이 이미 존재하는 경우 데이터를 업데이트하는 방법은 무엇입니까?

INSERT INTO LatestData (OBJECTID, LINING_MATERIAL) 
SELECT OctoberExport.OBJECTID, OctoberExport.LINING_MATERIAL 
FROM OctoberExport 
WHERE (((OctoberExport.OBJECTID) Not In (SELECT SeptExport.OBJECTID FROM SeptExport WHERE OctoberExport.OBJECTID = SeptExport.OBJECTID AND OctoberExport.LINING_MATERIAL = SeptExport.LINING_MATERIAL))); 
+1

가능한 경우 [테이블에 삽입하거나 존재하는 경우 업데이트 (MySQL)] (http://stackoverflow.com/questions/) 4205181/insert-to-table-or-update-if-exists-mysql) - 질문을 게시하기 전에 [Search] (http://stackoverflow.com/search) 기능을 사용하십시오. – Pred

+2

질문 제목은 중복 키 업데이트에 대한 간단한 사례를 제시하지만 쿼리가 다른 것을 제안하기 때문에 실제로 필요한 것이 명확하지 않습니다. 어쩌면 원하는 출력으로 예제 데이터를 게시 할 수 있습니까? – piotrm

답변

0

on duplicate이라는 MySQL의 기능이 있습니다. 값이 없다면 값을 추가하도록 쿼리에 지시 할 수 있습니다. 삽입되어 있으면 값을 추가 할 수 있습니다.

중복 KEY UPDATE ON 지정하고 행이 가 UNIQUE 인덱스 나 PRIMARY KEY에서 중복 값을 일으킬 것이라는 점을 삽입하면

는, 이전 행의 UPDATE가 수행된다. (mysql.com 찍은)

예 :

INSERT INTO table (a,b,c) VALUES (1,2,3),(4,5,6) 
    ON DUPLICATE KEY UPDATE c=VALUES(a)+VALUES(b); 
0

PRIMARY KEY 고유성 제약 시행. 표의 기본 키가 OBJECTID 열이므로 과 동일한 행을 삽입 할 수 없습니다.OBJECTID 값입니다.

테이블에 동일한 OBJECTID 값을 갖는 두 개의 행을 가지려면 테이블의 PRIMARY KEY을 변경하여 고유 한 다른 열 (들)을 포함시켜야합니다.

예를 들어 다른 열 EXPORT_MONTH을 추가 할 수 있습니다. SeptExport 테이블의 행은 하나의 값을 가지며 OctExport 테이블의 행은 다른 값을 가지므로 두 행을 테이블에 추가 할 수 있습니다.

UPDATE 문을 사용하여 기존 행의 값을 빈 문자열 이외의 값으로 설정할 수 있습니다.

외래 키 참조가있는 경우 PRIMARY KEY 제약 조건을 변경하는 것이 약간 복잡 할 수 있습니다.

PRIMARY KEY (OBJECTID, EXPORT_MONTH) 

(때로는 새로운 테이블을 생성 한 다음 기존 테이블에서 행을 복사하고, 테이블의 이름을 변경하는 길을 가야하는 것입니다 :하지만이 같은 기본 키 제약 조건으로 끝낼해야합니다 이 같은 변화를 만들기 위해)

최종 결과는 당신이 당신의 테이블에이 같은 행을 가질 수 있다는 것입니다.

OBJECTID EXPORT_MONTH LINING_MATERIAL 
-------- ------------ --------------- 
    12345 SeptExport Aluminum 
    12345 OctExport  Platinum 

(나는 당신이 요구하는지에 정확하게 명확하지 않다, 그러나 주어진 OBJECTID에는 고유 한 제약 조건이 있으므로 OBJECTID에 같은 값을 가진 두 개의 행을 포함 할 수 없습니다.

관련 문제