的帮助下执行非子查询联合mysql_union ()
.目前分为以下几个步骤:
st_select_lex_unit:准备
(同样的程序可以调用单个选择
对于派生表=>,我们在这个过程中支持它,但我们不在这里描述它):创建
select_union
(继承自select_result
),将选择结果写入临时表,临时表项为空。我们需要这个对象存储在加入
结构链接在上面,但是我们还没有临时表结构。分配
加入
结构和执行加入:准备()
对于每一个选择
的元素类型的完整信息选择
列表(结果)。合并结果字段的类型,并将它们存储在特殊的Items中(Item_type_holder
)也将在这个循环中执行。此操作的结果(结果字段类型的列表)将存储在st_select_lex_unit:类型
).创建一个临时表来存储联合结果(if
联盟
没有所有
选项,'distinct'参数将被传递给表创建过程)。对象分配一个临时表
select_union
对象。
st_select_lex_unit:执行
如果这不是第一次调用,则从临时表中删除行。
如果这是第一个电话,打吧
加入:优化
其他的加入:reinit
然后加入:执行
对所有选择
s (select_union
将为临时表写入一个结果)。如果union是可缓存的,并且这不是第一次调用,那么该方法将什么也不做。调用
mysql_select
在带有全局的临时表上命令
而且限制
参数采集后的所有结果选择
s.特色菜fake_select_lex
(SELECT_LEX
),这是为每一个联盟
将通过此程序(此SELECT_LEX
也可用于存储全局命令
而且限制
参数,如果在查询中使用括号)。