如何选择没有任何匹配外键的行

时间:2016-03-17 07:58:10

标签: sql-server tsql sql-server-2005

{{1}}

我有上面的查询,我想用它来查找" MainTable"中的所有行。没有匹配的外键。

" MainTable"中的列项是nvarchar(200)数据类型,但表Lookup_Items中的列Item_ID是一个i​​nt。

我遇到的问题是,如果MainTable中的一行没有匹配的外键,则Item列将包含字符串数据,上述查询将失败并显示错误消息

  

转换nvarchar值时,转换失败' TestValue'数据类型int。

有没有我可以解决这个问题所以查询可以成功执行并仍然给我所有没有匹配外键的行?

2 个答案:

答案 0 :(得分: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

这样,它们都将被比较为相同的数据类型,并且不会引发错误。

答案 1 :(得分: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