2011-05-10 2 views
1

편집 : OOPS, 분명히 테스트 테이블에서 자동 증가로 ID를 설정하는 것을 잊었습니다. 설정 한 후 쿼리가 예상대로 작동합니다. 미안 모두!증분 값을 생성하면서 한 테이블의 행을 다른 테이블에 삽입 하시겠습니까?

소스대상 두 개의 테이블이 있습니다.

소스 필드 1과 FIELD2

신지 이 필드 ID, 필드 1과 FIELD2을 갖는 필드를 갖는다. Id는 기본 색인 및 자동 증가입니다. ,

INSERT INTO dest (field1, field2) 
SELECT field1, field2 
FROM source 
WHERE NOT EXISTS(SELECT * 
       FROM dest 
       WHERE (source.field2=dest.field2) 
       ); 

하지만, 각 복사 된 행의 ID는 내가 필드 1과 FIELD2 복사 할 내 쿼리에서 말할 수있는 방법 0

입니다 :

나는 다음과 같은 쿼리를 시도했다 ID에 대한 새로운 자동 증가 값을 만드시겠습니까?

+1

'dest.id'에'auto_increment'가 있습니까? – Quassnoi

답변

3

당신 : 당신은 단지 dest에있을 field2의 고유 값을 원하는 경우

UNIQUEdest.field2을 선언하고 그냥 사용할 수 있습니다, 또한

SHOW CREATE TABLE dest 

의 출력을 게시하시기 바랍니다 왼쪽 조인을 사용하여 exists 문을 다시 쓸 수 있습니다.

INSERT INTO dest (field1, field2) 
SELECT field1, field2 
FROM source 
LEFT JOIN dest 
ON source.field2 = dest.field2 
WHERE dest.field2 IS NULL; 

id도 자동으로 자동 증가합니다. 그렇지 않다면 테이블 정의 (show create table dest)에서 수행되는지 확인하십시오.

+0

죄송합니다. 귀하의 의견을 읽은 후에 저는 테스트 테이블에 ID를 자동 증가로 설정하는 것을 잊었습니다 ... 그래서 원래 쿼리가 작동했습니다. –

0

AUTO_INCREMENT으로 선언 된 쿼리는 dest.id으로 증가합니다.

INSERT IGNORE 
INTO dest 
SELECT field1, field2 
FROM source 
관련 문제