只是一个类似于我正在运行的联合查询的示例。我对别名表xyz_1有疑问。 oracle如何处理与联合一起创建的别名表? oracle是否在不同的SGA中运行这两个语句,因此它们彼此之间不可见?
select * from abc, (select a from xyx where c='yes') xyz_1 where abc.col_1 = xyz_1.col_1 union select * from abc, (select a from xyx where c='no') xyz_1 where abc.col_1 = xyz_1.col_1
答案 0 :(得分:1)
UNION是一个集合运算符,其功能是合并两个查询的结果。这两个查询都是独立执行的,否则可以在两个查询中使用相同的表别名,例如,通常在子查询中会这样做。使用UNION的唯一限制是两个查询必须返回相同数量的字段,并且具有相似的数据类型(考虑到可能发生隐式转换)。
the Oracle docs没有提到对子查询中别名的任何限制:
您可以使用集合运算符UNION,UNION ALL,INTERSECT和MINUS组合多个查询。所有集合运算符具有相同的优先级。如果SQL语句包含多个集合运算符,则Oracle数据库从左到右对其进行评估,除非括号中明确指定了其他顺序。