2016-03-17 54 views
1
SELECT * 
FROM dbo.MainTable mt 
LEFT JOIN Lookup_Items msn ON mt.Item = msn.Item_ID 
WHERE msn.Item_ID is NULL 

我有上面的查詢,我想用來查找「MainTable」中的所有行與一個匹配的外鍵。我怎樣才能選擇沒有任何匹配的外鍵的行

「MainTable」中的列項是nvarchar(200)數據類型,但表Lookup_Items中的列Item_ID是int。

我的問題是,如果在MainTable某行不具有匹配的外鍵,該項目列將包含字符串數據和上面的查詢將失敗,錯誤消息轉換時

轉換失敗nvarchar值'TestValue'爲數據類型int。

在那裏我可以工作一輪,這樣查詢可以成功執行,並仍然給我所有的行沒有匹配的外鍵?

+1

爲什麼Maintable和Lookup_Items中的數據類型不同? – Squirrel

回答

0

只投中的int轉換成字符串:

SELECT * 
FROM dbo.MainTable mt 
LEFT JOIN Lookup_Items msn ON mt.Item = CAST(msn.Item_ID as NVARCHAR(200)) 
WHERE msn.Item_ID is NULL 

這樣一來,他們都將被相比相同的數據類型,並不會引發錯誤。

0

你的問題是item_ID的類型。您應該將項目ID轉換爲nvarchar:

SELECT * 
FROM dbo.MainTable mt 
LEFT JOIN Lookup_Items msn ON mt.Item = cast(msn.Item_ID as nvarchar(200)) 
WHERE msn.Item_ID is NULL