2012-04-30 4 views
2

Table_1에없는 JobNoCellNo 열을 View_1에서 삽입하려고합니다. 이 쿼리를 작성했습니다 & 오류가 발생했습니다.WHERE를 사용하여 INSERT INTO

제발 도와주세요.

나는 문제는 당신 WHERE 절입니다 SQL 서버 2008

INSERT INTO Table_1(ID, JobNo, CellNo) 
    SELECT View_1.ID, View_1.JobNo, View_1.CellNo 
    FROM View_1 
    WHERE View_1.JobNo 
    AND View_1.CellNo NOT IN (SELECT JobNo, CellNo FROM Table_1) 
+0

오류가 발생하는 경우 - ** 무엇인지 알려주십시오! ** 그냥 우리에게 도움이되지 않는다고 말하면 .... –

답변

6

를 사용하고 -이 같은 필드의 세트를 비교할 수 없습니다. 한 번에 하나의 필드 만 비교할 수 있습니다.

대신보십시오 :

WHERE View_1.JobNo NOT IN(SELECT JobNo FROM Table_1) 
AND View_1.CellNo NOT IN (SELECT CellNo FROM Table_1) 

는 또한 단일 EXISTS 문 사용할 수 있습니다 : SQL Server 2008을 사용하고 있기 때문에

INSERT INTO Table_1(ID, JobNo, CellNo) 
SELECT View_1.ID, View_1.JobNo, View_1.CellNo 
FROM View_1 v 
WHERE NOT EXISTS (SELECT 1 FROM Table_1 t 
        WHERE t.JobNo = v.JobNo 
        AND t.CellNo = v.CellNo) 
+0

일부 DBMS는 다음과 같은 조건을 허용합니다 :'(View_1.JobNo, View_1 .CellNo) NOT (SELECT JobNo, CellNo FROM Table_1) - 물론 쿼리와 다릅니다. 내 생각 엔 OP가 SQL Server에서 작동하는 tthat와 동등한 것을 원합니다. –

+0

@ypercube - 입력 할 때'EXISTS'를 추가했습니다 : – JNK

+2

'exists'에 +1. 막 막 게시하려 했어요. 아마도 검색어가 동등하지 않다고 언급해야 할 것입니다. –

1

을, 당신은 MERGE 문을 사용할 수있다 :

MERGE INTO Table_1 dst 
USING (
    SELECT View_1.ID, View_1.JobNo, View_1.CellNo 
    FROM View_1 
) src 
ON src.JobNo = dst.JobNo 
AND src.CellNo = dst.CellNo 
WHEN NOT MACHED THEN INSERT (ID, JobNo, CellNo) 
    VALUES (src.ID, src.JobNo, src.CellNo) 

개인적으로 f MERGE 문은 INSERT .. SELECT .. WHERE보다 간결합니다.