我正在努力创建一个视图,该视图使用完整的外连接,然后使用左外连接来连接它。视图生成我想要的结果,但我们首先使用EF6数据库将DB对象拉入.net MVC应用程序。有了这个,我们必须在视图中至少有一个列是非null唯一的,以允许ef创建推断的主键。我之后尝试添加它,但无法绕过它,因为SQL中带有完整外连接的视图必须允许空值。
我也尝试过union和union,但这会产生重复。我想要非空的唯一值。
例如。让我们说TableA,TableB和TableC都具有相同的主键。所有表都有不同的列(这就是union all生成重复的原因)。我希望合并后的合并结果。
Select
c.guid
,a.something
,b.something
,c.something
,etc
FROM (TableA as a Full Outer Join TableB as b on a.guid = b.guid) LEFT OUTER JOIN
TableC as c on c.guid = a.guid OR c.guid = b.guid
我还首先尝试使用TableC进行右外连接,但结果相同。
提前致谢
答案 0 :(得分:1)
尝试...
Select Coalesce(a.guid, b.guid, c.guid) As guid,
(the rest of your query here)
答案 1 :(得分:0)
从字面上看,它应该是这样的:
...
left join dbo.TableC c on c.guid = isnull(a.guid, b.guid)
另一方面,由于C实际上是A和B的超类型,因此连接顺序应相反:
select c.guid, ...
from dbo.TableC c
left join dbo.TableA a on a.guid = c.guid
left join dbo.TableB b on b.guid = c.guid
where isnull(a.guid, b.guid) is not null
...
你应该从一开始就提到这种情况。
答案 2 :(得分:0)
如果它是一个泛化模型,这不会起作用吗?由于c总是存在,当a是-a c OR b是-a c。
select
c.guid, ISNULL(a.guid, 'N/A'), ISNULL(b.guid, 'N/A'), *
FROM
TableC c
INNER JOIN TableA a ON c.guid = a.guid
INNER JOIN TableB b ON c.guid = b.guid