如何从另一个相应的行插入NULL值?

时间:2015-06-29 10:29:09

标签: sql-server sql-server-2012

如何连接3个表,以便可以替换result中的某些空值。

我试过了:

SELECT        ISNULL(Culture,CultureInfoCode) as Culture, ISNULL(Name,'NA') as Name,  ISNULL(Value,'NA') as Value
FROM            SiteLanguages Left JOIN
                         WebDbResources ON SiteLanguages.CultureInfoCode = WebDbResources.Culture Left JOIN
                         KeyWebDbResources ON WebDbResources.KeyWebDbResourceID = KeyWebDbResources.KeyWebDbResourceID
                         where Status=1

结果如下

Culture  Name                                                 Value
en-US    Key_FirstName                                        John
TR       NA(Here It should also be Key_FirstName)             NA (ok)

但是我希望第二行中的Name字段为Key_FirstName和Value NA(用于相应的TR Culture)。

这是架构:

SiteLanguages:

CultureInfoCode Status
en-US            1
TR               1
AR               0

KeyWebDbResources:

KeyWebDbResourceID  Name
1                   Key_FirstName

WebDbResources:

WebDbResourceID  KeyWebDbResourceID   Culture   Value
1                   1                  en-US    FirstName

TR不存在第二次翻译,这就是为什么我想在有文化和关键的连接上填空。

1 个答案:

答案 0 :(得分:1)

KeyWebDbResources开始加入并加入SiteLanguages以获取应该存在的所有文本。左外连接到WebDbResources以查找实际找到的文本。

SELECT 
  ISNULL(SiteLanguages.Culture, CultureInfoCode) as Culture, 
  ISNULL(KeyWebDbResources.Name,'NA') as Name,  
  ISNULL(WebDbResources.Value,'NA') as Value
from KeyWebDbResources 
  cross join SiteLanguages 
  left outer join WebDbResources 
    ON WebDbResources.KeyWebDbResourceID = KeyWebDbResources.KeyWebDbResourceID 
    AND WebDbResources.Culture = SiteLanguages.CultureInfoCode
where SiteLanguages.Status=1

问题在于你没有得到文化......