2012-04-30 7 views
2

Table_1にないJobNoCellNoの列をView_1から挿入しようとしています。私はこの質問を書いた&私はエラーが発生します。WHEREを使用してINSERT INTO

これを修正する際にお手伝いしてください。

私は問題があなたのWHERE句であるSQL Server 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

を使用しています - あなたは、このようなフィールドのセットを比較することはできません。 一度に1つのフィールドしか比較できません。

ではなく、試してみてください。

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 IN(SELECT JobNo、CellNo FROM Table_1) ' - もちろんあなたのクエリとは異なります。私の推測では、OPはSQL Server上で動作するtthatと同等のものを必要としているということです。 –

+0

@ypercube - あなたが入力した通りに 'EXISTS'を追加しました:) – JNK

+2

' exists'のために+1。ちょうどそれを投稿しようとしていた。おそらく、クエリが同等ではないと言及する必要があります。 –

1

SQL Server 2008を使用しているので、あなたがMERGE声明を利用することができます:

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

代わりに使用すると、単一のEXISTSステートメントを使用することができます

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より簡潔です。

関連する問題