SQL Server选择父子级+粗体(Join)

时间:2019-03-29 00:32:12

标签: sql sql-server parent-child coalesce

我有下表:

1。表格语言

  • Id(varchar)(PK)
  • 说明(varchar)
  • 系统(位)
  • ParentId(varchar)FK到ID

示例: [EN,英语,1,NL],[NL,荷兰语,1,null],[FR,法语,0,EN]

2。表enumExample

  • 编号(int)
  • 说明(varchar)

示例: [1,Bla],[2,blabla],[3,blablabla]

3。表enumExampleTranslation

  • LanguageId(PK,FK到语言)
  • EnumExampleId(int,PK,FK到enumExample)
  • 值(varchar)

示例: [EN,1,Blo],[NL,1,bloblo]

4。查看:vwExampleView

  • LanguageId(varchar)
  • 编号(int)
  • 说明(varchar)

示例: [EN,1,Blo],[NL,1,bloblo]。 [FR,1,blo]

问题在于视图:

  • 语言表包含语言的层次结构,例如EN(是XE的父母)(YU的父母)
  • 表enumExampleTranslation有时会保存值,例如它可以包含EN翻译,但不能包含XE翻译,也不能包含某个枚举的YU翻译(或EN和XE翻译,但不包含YU翻译)。
  • 视图...应始终显示翻译,但如果对于某个值没有YU的翻译,则如果没有值,则应采用XE;如果没有值,则应采用EN;如果没有值,则应采用enum示例说明。

a。因此,为了从语言表中获取语言链,我可以

Declare @TABLEVAR table (id nvarchar(3) ,parentid nvarchar(3))
;with parents as (
   select Id, Parentid from Language where Id = 'UK'
   union all
   select c.Id, c.ParentId from Language c
   join parents p on p.ParentId = c.Id 
)
INSERT INTO @TABLEVAR
select *
from parents
OPTION (MAXRECURSION 0)

但是现在在视图中,我做了类似的事情,但是没有空值,而是在合并中进行了选择:

 Select t1.id, g.EnumExampleId, (select top(1) i.Value from   
 EnumExampleTranslation i where i.EnumExampleId = g.EnumExampleId )    
 as Description 
 FROM @TABLEVAR t1 FULL OUTER JOIN
 EnumExampleTranslation g on t1.id = g.LanguageId

我要开始使用的最后一个查询(或视图定义)。但是我很难在其中获取@TABLEVAR值。

0 个答案:

没有答案