【问题标题】:Table Join returns Null with matching fields in SQL Server 2008表连接返回 Null 与 SQL Server 2008 中的匹配字段
【发布时间】:2014-08-01 12:01:46
【问题描述】:

我有一个奇怪的问题。我正在尝试运行此代码,但它一直没有返回任何匹配项。这应该有效。 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”,那么它可以工作。

【问题讨论】:

  • 请编辑问题并在两个表格中显示LanguageId 列的声明。您还可以在 SQL Fiddle 上设置示例。

标签: sql sql-server-2008 join nvarchar


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-09-12
      • 1970-01-01
      • 1970-01-01
      • 2015-06-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多