Table Join返回Null,其中包含SQL Server 2008中的匹配字段

时间:2014-08-01 12:01:47

标签: sql sql-server-2008 join nvarchar

我有一个奇怪的问题。我正在尝试运行此代码,但它不会返回任何匹配项。这应该工作。两个表中都存在LanguageId。我唯一能想到的是字段类型是nvarchar。

SELECT Users.LanguageId
FROM Users
JOIN Locale ON Users.LanguageId = Locale.LanguageId

您可以在http://www.mediafire.com/download/3eute31s35tygw2/TEST.zip下载测试数据库。我猜测'en-us'被保存到Users.LanguageId的方式有所不同。如果删除该值并手动输入'en-us',则可以正常工作。

2 个答案:

答案 0 :(得分:3)

一个表上的LanguageId是en-us,另一个是en_us。这就是他们没有正确加入的原因。

答案 1 :(得分:1)

您必须将en-us更改为en_us,请尝试以下解决方案

SELECT Users.LanguageId
FROM Users
JOIN Locale ON Users.LanguageId = REPLACE(Locale.LanguageId,'-','_')

或更好的方法是修复表格中的数据:

update Locale
set LanguageId = REPLACE(LanguageId,'-','_')