为什么使用union 或者union all的连接查询的语句中不能够使用 Order 排序?用一个比较复杂的select查询向一个表A插入记录,只有前面的10个字段的值被插进去,后面的8个字段的值没有被插进去(不是约束造成的问题,也没有任何报错)。如果用表A复制一个B表(create table b as select * from a ),则所有的字段的值都能够被插入B表。再用B表向A表插入记录,所有的字段的值也都能够被插入B表。
怎么查看具体的insert into a select ... from ...的过程呢?Oracle9i Enterprise Edition Release 9.2.0.1.0 
PL/SQL Developer 7.1.4.1391 汉化版本

解决方案 »

  1.   

    select * from(select * from .. union select * from ..) order by xx
      

  2.   

    2楼的方法可以完成排序.怎么查看具体的insert into a select ... from ...的过程呢? 
     因为insert操作是个事物操作,所以可以有以下的方法:
    1.通过logmnr分析重做日志
    2.通过执行计划,理论分析。
      

  3.   

    不用这么麻烦,我告诉你一个最简单的
    我举例如下:
    select fld1,fld2 from tab1
    union
    select fld3,fld4 from tab2
    order by 1
    也就是按第一列排序,或者order 2按第二列排序
    接分...
      

  4.   

    select * from(select * from .. union select * from ..) order by xx 这个我也会。我想用union和union all 分析一下两表查询出来的数据是不是一样的。
    怎么查看具体的insert into a select ... from ...的过程呢?  
     因为insert操作是个事物操作,所以可以有以下的方法: 
    1.通过logmnr分析重做日志 
    2.通过执行计划,理论分析。 
    怎么做?
      

  5.   

    union 或者union all的连接只是把查询的结果连接起来,
    因为两个表有可能有不同的索引,所以仅用一个order by 排序两个表是不行的在逻辑上这样分析:
    先把两个表的查询结果合并起来,再对这个结果集排序select * 
    from (select * from .. union select * from ..) A 
    order by xxx
      

  6.   

    可以使用 order by,但只能放在语句的最后,也就是说要整个语句统一排序。
      

  7.   

    怎么查看具体的insert into a select ... from ...的过程呢?   
     因为insert操作是个事物操作,所以可以有以下的方法:  
    1.通过logmnr分析重做日志  
    2.通过执行计划,理论分析。  
    怎么做?
      

  8.   

    用一个比较复杂的select查询向一个表A插入记录,只有前面的10个字段的值被插进去,后面的8个字段的值没有被插进去(不是约束造成的问题,也没有任何报错)。如果用表A复制一个B表(create table b as select * from a ),则所有的字段的值都能够被插入B表。再用B表向A表插入记录,所有的字段的值也都能够被插入B表。
    怎么查看具体的insert into a select ... from ...的过程呢? 自己的代码有问题,已经改进。实际上用原来的代码向插入B数据也有同样的问题。
      

  9.   

    为什么使用union 或者union all的连接查询的语句中不能够使用 Order 排序?union 或者union all前后的字段顺序要一致,
    Order 放在最后进行排序
      

  10.   

    建议如果想插入完全数据使用union all 连接,如果使用union 连接,那么选择相同的数据就只显示一个,还有就是因为使用union 作连接就是把数据集连接起来,只能针对这个数据集排序,而不能根据里面的子数据集排序。