2012-04-30 224 views
2

我試圖插入JobNoCellNo列中的不在Table_1中的列View_1。我寫了這個查詢&我得到一個錯誤。INSERT INTO using 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

的問題是你的WHERE條款 - 你不能比較臺這樣的領域。 一次只能比較一個字段。

嘗試,而不是:

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

或者,您也可以使用一個EXISTS聲明:

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需要與tthat相同的東西,它適用於SQL-Server。 –

+0

@ypercube - 當你輸入時,我添加了一個'EXISTS': – JNK

+2

+1爲'exists'。即將發佈那一個。也許你應該提到你的查詢是不相同的。 –

1

由於您使用SQL Server 2008中,你可以使用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 ind一個MERGE陳述比INSERT .. SELECT .. WHERE更簡潔。