索引视图中完全外连接的替代方案
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 索引视图中不允许外部(左、右、全)连接。 @阿里特拉以上是关于索引视图中完全外连接的替代方案的主要内容,如果未能解决你的问题,请参考以下文章