sql - SQL Server Select Parent-Child + COALESCE ( Join )
问题描述
我有以下表格:
1.表格语言
- ID (varchar) (PK)
- 说明(varchar)
- 系统(位)
- ParentId (varchar) FK 到 Id
示例: [EN, English, 1, NL] , [NL, dutch, 1, null] , [FR, french, 0, EN]
2.表枚举示例
- 标识(整数)
- 说明(varchar)
示例: [1, Bla] , [2, blabla] , [3, blablabla]
3.表枚举ExampleTranslation
- LanguageId(PK、FK 到语言)
- EnumExampleId (int, PK, FK to enumExample)
- 值(varchar)
示例: [EN, 1, Blo] , [NL, 1, bloblo]
4.视图:vwExampleView
- 语言 ID (varchar)
- 标识(整数)
- 说明(varchar)
示例:[EN, 1, Blo] , [NL, 1, bloblo]。[FR, 1, 布鲁]
问题是关于视图:
- 语言表包含语言的层次结构,例如 EN(是父级)XE(是父级)YU
- 表 enumExampleTranslation 有时会保存一些值,例如它可以保存 EN 翻译,但不能保存 XE 翻译,也不能保存某个枚举的 YU 翻译。(或 EN 和 XE 翻译,但不能保存 YU 翻译)。
- 视图...应该始终显示翻译,但如果 YU 没有特定值的翻译,则它应该采用 XE,如果没有价值,它应该采用 EN,如果它没有价值,它应该采用 enumExample 描述。
一个。所以为了从语言表中获取语言链,我可以
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 值时遇到了一些麻烦。
解决方案
推荐阅读
- r - 在组内随机抽样一个组
- dagger-2 - 我如何在匕首 2 中注入 viewmodelScope
- python - 关系“django_migrations”已经存在
- spring-boot - Spring Boot webflux 返回 HTML 内容
- javascript - 来自 Axios 的响应数据将我的 JSON 转换为 Object 对象
- windows - vs代码git错误:Git:/usr/bin/bash:init:没有这样的文件或目录
- excel - 使用 PasteSpecial 剪切/粘贴
- java - 如何将 SharedPreferences 数据从 settingActivity 传递到 MainAdapter?
- javascript - 如何根据 API 结果值更改 HTML 背景?
- python-3.x - 使用 bs4 遇到 Webscraping 问题