索引视图中完全外连接的替代方法

时间:2016-05-11 09:06:39

标签: sql sql-server join

我想显示两张桌子的记录。

它应该返回两个表中的所有匹配记录。

如果第一个表中存在记录而第二个表中没有记录,则它应该从第二个表中返回null并从第一个表中返回记录。 如果第二个表中存在记录而第一个表中没有记录,则它应该从第一个表中返回null并从第二个表中返回记录

我不想使用full outer join,因为我想在索引视图中创建索引视图和外部(左,右,全)连接。

这种情况有没有更好的解决方案。

2 个答案:

答案 0 :(得分:2)

对于带有“模拟外连接”的索引视图,有一个workaround。然而,这很可怕,我不会提倡它。

更好的解决方案是索引基础表并跳过整个视图。或者创建两个索引视图,并在调用视图的查询中执行outer join

另一个解决方案是不创建索引视图,而是创建一个实际的表(您可以使用触发器保持最新)并在其上放置索引。由于您无论如何都要实现视图,这可能是最佳解决方案。

很可能,索引视图(无论您选择哪种方法)都不会提供您正在寻找的(性能)结果(尽管您创建实际表的最后一种方法可能)。你能解释为什么你觉得在这种特殊情况下你需要一个索引视图吗?

顺便说一下,here是一个(简短)解释为什么索引视图不允许outer joins

答案 1 :(得分:0)

根据您的要求,您应该使用完全外部联接。如果你想要一个替代品......你可以使用下面的方法。

sel cola,colb,colc... from table a where colmnlist not in (select columnlist     from  table b )
union all
sel cola,colb,colc from table b where colmnlist not in (select columnlist     from  table a )

但是在这种情况下,为什么要避免完全外连接的任何特定原因。