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

Posted

技术标签:

【中文标题】索引视图中完全外连接的替代方案【英文标题】:Alternative for full outer join in indexed view 【发布时间】:2016-09-06 13:46:26 【问题描述】:

我想显示两个表中的记录。

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

如果一条记录存在于第一个表中但不存在于第二个表中,则它应从第二个表中返回 null,并从第一个表中返回记录。 如果记录存在于第二个表中但不存在于第一个表中,则它应从第一个表返回 null,并从第二个表返回记录

我不想使用full outer join,因为我想创建一个索引视图,并且索引视图中不允许外部(左、右、全)连接。

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

【问题讨论】:

你为什么不想使用full join?它适用于这样的情况 另一种选择是两个左连接的联合。但是你为什么要这样做呢? 【参考方案1】:

有一个workaround 用于具有“模拟外连接”的索引视图。但是,这很可怕,我不会提倡它。

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

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

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

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

【讨论】:

非常感谢。 不客气。对于未来的问题,您可能想更多地解释您的要求。你被否决了很多,因为人们不知道你为什么不能使用外连接。【参考方案2】:

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

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 )

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

【讨论】:

请注意,UNION 会删除重复项,而 FULL OUTER JOIN 不会。 对对..我只是想给出一个粗略的逻辑草稿..理想情况下它应该是联合所有在这种情况下@jarlh 我想创建索引视图和索引视图中不允许的外部联接。 在这种情况下,您可以使用我上面提供的解决方案。让我知道它是否有效@Prince 索引视图中不允许外部(左、右、全)连接。 @阿里特拉

以上是关于索引视图中完全外连接的替代方案的主要内容,如果未能解决你的问题,请参考以下文章

在数值最近的索引、完全外连接、聚合列上合并 Pandas 时间序列数据集到最大值

哈希完全外连接如何工作?

具有空值的完全外连接自身

memsql 是不是支持完全外连接?

全外连接的替代方式

数据库面试系列大纲