Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 为缺少的关系创建具有备用/默认值的视图_Sql_Sql Server_Tsql_Views - Fatal编程技术网

Sql 为缺少的关系创建具有备用/默认值的视图

Sql 为缺少的关系创建具有备用/默认值的视图,sql,sql-server,tsql,views,Sql,Sql Server,Tsql,Views,在具有多个一对多对象关系的设置中,每个对象使用来自单独表的名称属性。比如说 Building(BuildingName), Floor(FloorName) 如果一个建筑有2个名称(2个LanguageID)和5个楼层,其中只有3个楼层有两个语言ID的名称,我仍然希望有10个结果条目。当语言id丢失时,楼层名称将从不匹配的楼层id中提取(默认)。这是否符合您的要求 此处的可运行示例: 编辑 此版本默认为任何语言: select b.Id , b.something , bn.name , is

在具有多个一对多对象关系的设置中,每个对象使用来自单独表的名称属性。比如说

Building(BuildingName), Floor(FloorName)

如果一个建筑有2个名称(2个LanguageID)和5个楼层,其中只有3个楼层有两个语言ID的名称,我仍然希望有10个结果条目。当语言id丢失时,楼层名称将从不匹配的楼层id中提取(默认)。这是否符合您的要求

此处的可运行示例:

编辑

此版本默认为任何语言:

select b.Id
, b.something
, bn.name
, isnull(bfn.name, (select top 1 name from [FloorName] x where x.FloorId=bf.Id))
, bl.code BuildingLanguage
from [Building] b
inner join [BuildingName] bn
    on bn.BuildingId = b.Id
inner join [Language] bl
    on bl.Id = bn.LanguageId
inner join [Floor] bf
    on bf.BuildingId = b.Id
left outer join [FloorName] bfn
    on bfn.FloorId = bf.Id
    and bfn.LanguageId = bl.Id
left outer join [Language] bfl
    on bfl.Id = bfn.LanguageId

这对你的目标是正确的吗

此处的可运行示例:

编辑

此版本默认为任何语言:

select b.Id
, b.something
, bn.name
, isnull(bfn.name, (select top 1 name from [FloorName] x where x.FloorId=bf.Id))
, bl.code BuildingLanguage
from [Building] b
inner join [BuildingName] bn
    on bn.BuildingId = b.Id
inner join [Language] bl
    on bl.Id = bn.LanguageId
inner join [Floor] bf
    on bf.BuildingId = b.Id
left outer join [FloorName] bfn
    on bfn.FloorId = bf.Id
    and bfn.LanguageId = bl.Id
left outer join [Language] bfl
    on bfl.Id = bfn.LanguageId

我不知道您真正想要什么,尽管我怀疑您可能正在寻找某种类型的
外部连接。您可以发布两个表中的示例数据和预期的查询结果吗?一个可以直接复制并粘贴到SSM中的自包含脚本将是理想的选择。
外部连接将为您提供所需的行。
COALESCE
函数将允许您用默认值替换联接返回的任何缺失(NULL)值。提供示例数据和所需结果将导致更详细的响应。我一直在研究“COALESCE”函数,但我正在尝试在本文中找出它。我不知道您真正想要的是什么,尽管我怀疑您可能正在寻找某种类型的
外部联接。您可以发布两个表中的示例数据和预期的查询结果吗?一个可以直接复制并粘贴到SSM中的自包含脚本将是理想的选择。
外部连接将为您提供所需的行。
COALESCE
函数将允许您用默认值替换联接返回的任何缺失(NULL)值。提供示例数据和期望的结果将得到更详细的响应。我一直在研究“聚合”函数,但是我想在这个上下文中弄清楚,当英语条目丢失时,是否可以默认为法语?是的-检查您希望如何确定默认语言-它是否应该选择给定楼层可用的任何语言,建筑物可用的任何语言,或者有优先级列表的默认语言的特定子集?只要有任何效果,基本上我只是试图避免名称中的空值。不用担心,最后尝试更新的代码(SQLFiddle链接也更新为显示代码的两个版本)当英语条目丢失时,是否可以默认为法语?是-检查您希望如何确定默认语言-是否只选择给定楼层可用的任何语言、建筑物可用的任何语言或具有优先级列表的默认语言的特定子集?仅选择任何作品,基本上,我只是试图避免名称中的空值。不用担心,在最后尝试更新的代码(SQLFIDLE链接也更新为显示代码的两个版本)