当前位置:操作系统 > Unix/Linux >>

union all的执行顺序


union all的执行顺序
 
IQ下面做应用开发的时候,遇到一个好玩的事情: 
  www.zzzyk.com  
情况1中,发现一个规律,union all 中执行顺序是: 
以第一个union all 的select 语句(如 红色标记)为分界线。 
先从最后union all的select(如蓝色标记)开始倒序输出到 红色标记的select子句, 
再输出第一个select子句 
最后输出红色标记的select子句 
 
Java代码  
       select '1' AREA_NAME  
       union all   
[color=red]select '3' AREA_NAME [/color]  
       union all   
       select distinct  '2'AREA_NAME  
       from DW.AREA  
       where (area_type_id =2 and  up_area_code = '00' ) or  up_area_code = '-1'   
       union all   
       [color=blue]select '4' AREA_NAME[/color]  
 
结果如下: 
Java代码  
AREA_NAME  
4  
2  
1  
3  
 
Java代码  
      select '1' AREA_NAME  
      union all   
      select distinct  '2'AREA_NAME  
      from DW.AREA  
      where (area_type_id =2 and  up_area_code = '00' ) or  up_area_code = '-1'          
      union all   
select '3' AREA_NAME   
      union all   
      select '4' AREA_NAME  
 
结果如下: 
Java代码  
AREA_NAME  
4  
3  
1  
2  
 
Java代码  
      select '1' AREA_NAME  
      union all   
      select distinct  '2'AREA_NAME  
      from DW.AREA  
      where (area_type_id =2 and  up_area_code = '00' ) or  up_area_code = '-1'          
      union all   
select '3' AREA_NAME   
      union all   
      select '4' AREA_NAME  
       union all   
      select distinct  '5' AREA_NAME  
      from DW.AREA  
      where (area_type_id =2 and  up_area_code = '00' ) or  up_area_code = '-1'    
 
Java代码  
AREA_NAME  
5  
4  
3  
1  
2  
 
这里面表DW.AREA为真实表。 
 
情况2,如果下面这种情况下: 
Java代码  
      select '1' AREA_NAME  
       union all   
select '2' AREA_NAME  
       union all   
       select '3' AREA_NAME  
       union all   
       select '4' AREA_NAME  
 
Java代码  
AREA_NAME  
'1'  
'4'  
'3'  
'2'  
 
Java代码  
select '2' AREA_NAME  
union all   
select '1' AREA_NAME  
union all   
select '4' AREA_NAME  
union all   
select '3' AREA_NAME  
 
Java代码  
AREA_NAME  
'2'  
'3'  
'4'  
'1'  
 
如union all的表不存在的时候,即单纯select子句,输出顺序就变成了: 
1.第一select 输出。 
2.此后从最后一个select倒序输出。 
 
上述为我目前看到的现象。 
具体什么原因,等后面有时间了的话,会好好探究的。 
估计和cursor生成的信息有关。mark 一下。
 
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,