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