2012-01-02 3 views
0

나는 마지막 즉,이 쿼리의 조건 부분을 작성하는 다른 방법이 있는지 알고 싶어 temptabPostgreSQL의 경기를 여러 값은

INSERT INTO mytab SELECT * FROM temptab 
    WHERE NOT EXIST (SELECT * FROM mytab WHERE 
    (mytab .col1= temptab .col1 AND mytab .col2=temptab .col2)) 

에서 내부 mytab 존재하지 않는 데이터를 삽입하기 위해이 쿼리를 성명서.
위의 쿼리는 절대적으로 잘 작동하지만 더 많은 열을 일치시킬 때 너무 길어집니다. 일부 무엇

내가 더 많은 표가 존재 내 table.Similary에 대한 기본 키와 같은이 작품의 조합 때문에 많은 열을 일치 할 필요
mytab.(col1,col2,...,coln)=temptab.(col1,col2,...,coln) 

같은 형식의 어떤 종류가 있는지 그래서 나는 생각했다.

감사합니다.

P. : 주저하지 말고 쿼리를 향상 시키십시오.

+1

을 당신이 많은 키 열은 데이터 모델에 문제가 있다는 이럴 의미 있다고합니다. 2 개, 아마 3 개 필드로 구성된 기본 키는 수용 가능하며 3 개 이상은 매우 드뭅니다. BTW : 키 필드의 값은 특정 조합에서만 발생합니까? (어쩌면 우리에게 어떤 데이터를 보여줄 수 있습니까?) – wildplasser

+0

@wildplasser, 최대 4 cols 조합의 테이블을 기본 키로 사용합니다. 데이터 부분에 대해서는 구체적인 조합이 없습니다. – Shirish11

+0

그것은 법이 아니며 단지 경험 법칙입니다. 대부분의 경우 ~ 3 개 필드 이상으로 구성된 키를 갖는 것이 디자인 문제를 나타냅니다. (비표준 데이터 가져 오기/변환시 발생할 수 있지만 다른 문제입니다) – wildplasser

답변

2

이처럼 쓸 수 있습니다 :

(mytab.col1, mytab.col2) = (temptab.col1, temptab.col2) 
3
INSERT INTO 
    mytab 
SELECT 
    * 
FROM 
    temptab 
WHERE 
    (temptab) NOT IN (
    SELECT (mytab) FROM mytab 
); 
+0

이것은 정말 깔끔한 트릭입니다! –

+0

@ Kouber, 근사하지만 테이블간에 개별 행을 일치시키지 않고 기본 키 값만 일치 시키려고합니다. – Shirish11