query1 --->存在一个由22个联接(21个left外部和1个external)组成的查询。而且投影列表很长。
UNION
query2->第二个查询具有21个联接(21个左外部联接)和相同的投影列表集。
总有一个,所以我只需要写一次projection-list,并且在query1和query2中有普通的联接。 ?
(注意:两个查询中的21个左外部联接都在表上)
答案 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(+);
欢呼