SQL Server Выберите Parent-Child + COALESCE (Join) - PullRequest
0 голосов
/ 29 марта 2019

У меня есть следующие таблицы:

1.Язык таблицы

  • Идентификатор (varchar) (PK)
  • Описание (varchar)
  • Система (бит)
  • ParentId (varchar)) От FK до Id

Пример: [EN, английский, 1, NL], [NL, голландский, 1, ноль], [FR, французский, 0, EN]

2.Таблица enumExample

  • Id (int)
  • Описание (varchar)

Пример: [1, Bla], [2, blabla], [3, блаблабла]

3.таблица enumExampleTranslation

  • LanguageId (PK, FK to Language)
  • EnumExampleId (int, PK, FK to enumExample)
  • Значение (varchar)

Пример: [EN, 1, Blo], [NL, 1, bloblo]

4.view: vwExampleView

  • LanguageId (varchar)
  • Id (int)
  • Описание (varchar)

Пример:[EN, 1, Blo], [NL, 1, bloblo].[FR, 1, blo]

Вопрос о представлении:

  • Таблица Language содержит иерархию языка, например, 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 там.

...