无论如何,有没有优化由联合和长投影列表组成的查询?

时间:2019-01-10 06:24:24

标签: mysql sql oracle

query1 --->存在一个由22个联接(21个left外部和1个external)组成的查询。而且投影列表很长。

UNION

query2->第二个查询具有21个联接(21个左外部联接)和相同的投影列表集。

总有一个,所以我只需要写一次projection-list,并且在query1和query2中有普通的联接。 ?

(注意:两个查询中的21个左外部联接都在表上)

1 个答案:

答案 0 :(得分:0)

文档here指出:

  

组件选择列表中的相应表达式   复合查询的查询必须在数量上匹配,并且必须在   相同的数据类型组(例如数字或字符)。

这意味着您无法一次指定投影列表,因为这是UNION运算符的要求。

但是对于选择部分,您可以做一些事情。如果query1和query2都连接有公共表/视图(外部),则可以将它们从UNION中取出,将其分开,然后将公共表/视图连接到其中,并处理{{1} }部分作为单独的UNION

如果您提供了查询的简化示例,那就更好了,但这是我想出的一个示例:

给出此查询(据说与您的查询类似):

VIEW

您可以将其替换为:

SELECT t0.col1, t2.col2 FROM table0 t0, table2 t2 WHERE t0.col = t2.col(+)
UNION
SELECT t1.col1, t2.col2 FROM table1 t1, table2 t2 WHERE t1.col = t2.col(+);

欢呼