2017-03-09 71 views
0

假設我有表A和B,表A包含30行ID,表B包含60行ID,我想通過使用不存在的地方將B.ID插入A.ID。如果B.ID不存在於表A中,表B ID將被插入表A.使用SQL Where Exist和數據類型轉換的正確方法是什麼?

INSERT INTO A(
ID) 
SELECT ID 
FROM B 
WHERE NOT EXISTS (Select ID From A WHERE A.ID = B.ID) 

我認爲在我的子查詢中存在一些問題。請告訴我如何解決這個問題。

假設A.ID屬於NVARCHAR(200)類型,B.ID屬於FLOAT類型。

INSERT INTO A(
ID) 
SELECT Cast(Cast(ID as Float)as Nvarchar) 
FROM B 
WHERE NOT EXISTS (Select ID From A WHERE A.ID = B.ID) 

但仍然有錯誤:將數據類型nvarchar轉換爲float時出錯。

TIA!

+3

什麼問題您有? –

+0

[如何避免SQL Server中的INSERT INTO SELECT查詢中出現重複?](http://stackoverflow.com/questions/2513174/how-to-avoid-duplicates-in-insert-into-select-query- in-sql-server) – Mark

+0

確定這個問題解決了,謝謝Mark,但是這裏出現了另一個錯誤:將數據類型nvarchar轉換爲float時出錯。 –

回答

2

使用聯接,而不是子查詢獲得更好的性能

INSERT INTO A(ID) 
SELECT CAST(B.ID AS nvarchar(200)) 
FROM A RIGHT JOIN B ON A.ID = CAST(B.ID AS NVARCHAR(200)) WHERE A.ID IS NULL 
+0

好吧,它就像一個魅力! –

相關問題