Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/visual-studio/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 是否仍然需要优化由union和长投影列表组成的查询?_Mysql_Sql_Oracle - Fatal编程技术网

Mysql 是否仍然需要优化由union和长投影列表组成的查询?

Mysql 是否仍然需要优化由union和长投影列表组成的查询?,mysql,sql,oracle,Mysql,Sql,Oracle,query1->有一个由22个联接组成的查询(21个左外部联接和1个外部联接)。还有一个长长的投影列表 联合 query2-->第二个查询有21个联接(21个左外部联接)和同一组投影列表 是否还有其他方法,以便我只需编写一次投影列表,并在query1和query2中编写公共联接 (注意:两个查询中的21个左外部联接在表中)文档说明: 组件的“选择”列表中的相应表达式 复合查询的查询数必须匹配,并且必须在 相同的数据类型组(例如数字或字符) 这意味着您不能只指定一次投影列表,因为这是UNION操作

query1->有一个由22个联接组成的查询(21个左外部联接和1个外部联接)。还有一个长长的投影列表

联合

query2-->第二个查询有21个联接(21个左外部联接)和同一组投影列表

是否还有其他方法,以便我只需编写一次投影列表,并在query1和query2中编写公共联接

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

文档说明:

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

这意味着您不能只指定一次投影列表,因为这是
UNION
操作符的要求

不过,对于选择部分,您可以做一些事情。如果query1和query2都有公共表/视图(外部)连接到它们,那么您可以将它们从
联合中取出,分离此部分并将公共表/视图连接到它,将
联合作为单独的
视图处理

如果您提供了一个简化的查询示例,它会更好,但我举了一个示例:

给出此查询(假设与您的查询类似):

您可以将其替换为:

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

干杯

创建临时表,然后加入该表将使事情变得更有意义fast@MitchWheat,是甲骨文
SELECT q1.col1, t2.col2 FROM
(
  select t0.col1, t0.col FROM table0 t0
  UNION
  select t1.col1, t1.col FROM table0 t1
) q1,
table2 t2
WHERE q1.col = t2.col(+);