有没有优化由联合和长投影列表组成的查询?

4xrmg8kj  于 2021-06-15  发布在  Mysql
关注(0)|答案(1)|浏览(365)

query1--->有一个由22个连接组成的查询(21个左外部连接和1个外部连接)。还有一个长长的投影列表。
联盟
query2-->第二个查询有21个联接(21个左外联接)和同一组投影列表。
有没有其他方法可以让我只需要写一次投影列表,以及query1和query2中的公共连接?
(注意:两个查询中的21个左外部联接都在表上)

0sgqnhkj

0sgqnhkj1#

此处的文档说明:
复合查询的组件查询的选择列表中的相应表达式必须在数字上匹配,并且必须位于同一数据类型组中(例如数字或字符)。
这意味着您不能只指定一次投影列表,因为这是 UNION 接线员。
不过,您可以为选择部分做一些事情。如果query1和query2都有公共表/视图(外部)连接到它们,那么您可以将它们从 UNION ,分离此部分并将公共表/视图连接到它,处理 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(+);

您可以将其替换为:

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(+);

干杯

相关问题