SQL文如下,
select (
select st from 
(select substr(t1.text,level,1) st from dual connect by level < length(t1.text)+1)
where rownum = 1
),T1.text from aa T1 
-------------表结构--------------
create table aa(id varchar2(9),text varchar2(90),primary key(ID));
-------------数--据-------------
insert into aa(id,text) values('1','123');
insert into aa(id,text) values('1','345');
insert into aa(id,text) values('1','6');
-------------目前结果-------------
1   123
1   345
1   6
-------------目标结果-------------
1   123
3   345
6   6
怎么就得不到目标结果呢?
如果最外层查询以行为单位,遍历aa表,把遍历当前行的text出入子查询中作为FF.text的值,
为什么最后的结果每条都同为第一条的值。
好久不问问题了,描述得不好,问题也可能很傻。
大家见谅,另外分不够的话可以单说哈。

解决方案 »

  1.   

    不明白大虾的思路
    不过,select substr(t1.text,level,1) st from dual connect by level  < length(t1.text)+1) 
    where rownum = 1 
    就是求第一条的,是个死值呀,怎么会不同呢
      

  2.   

    -------------表结构-------------- 
    create table aa(id varchar2(9),text varchar2(90),primary key(ID)); insert into aa(id,text) values('1','123'); 
    insert into aa(id,text) values('1','345'); 
    insert into aa(id,text) values('1','6'); 主KEY是ID,你的这个数据放的进去吗?  ID都是'1'. 唯一性啊.老大.
      

  3.   

    你里层 有rownum=1
    这样st不是始终为1嘛
    然后再与外层关联,怎么会出现你想要的结果?
      

  4.   

    写错了
    insert into aa(id,text) values('1','123');  
    insert into aa(id,text) values('2','345');  
    insert into aa(id,text) values('3','6');  
      

  5.   

    where rownum = 1 是中间层查询的条件,目的是在最内层查询的结果中选中第一条,当然应该排序会好一点不过本问题的关键似乎不在这里的样子。
    之所以说结果应该会不同是因为最内曾查询所依赖的t1.text是由最外层查询aa的每条记录不同而引起的。
      

  6.   

    也许我对这个SQL的执行顺序理解不正确,
    我的观点是
    首先最外层查询全表遍历,针对每一条记录的text走到内增循环中,由内层循环把结果(只能是一条)返回回来,形成最外层的试图。
    依照这个思路的话,因为rownum = 1 并不是最外层循环的rownum应该不会影响吧!
      

  7.   

    问题解决鸟
    select max(substr(text,level,1)) st ,text
    from (select id,text,length(text)+1 len from aa)
    connect by level  < len 
    group by text
    比较奇怪的事情,使用我上面的思路行不通。
    也就是说由于存在基于connect by 的递归,所以外外层查询的值,没有办法代换到内层查询。
    但是connect by level 的时候居然是可以根据两行不同能够的记录生成对应的多行值的。
    当初还想绕过这一点呢。
    看来还是对connect by 了解得不够深入。
    决定结帖,来者有分。