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的值,
为什么最后的结果每条都同为第一条的值。
好久不问问题了,描述得不好,问题也可能很傻。
大家见谅,另外分不够的话可以单说哈。
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的值,
为什么最后的结果每条都同为第一条的值。
好久不问问题了,描述得不好,问题也可能很傻。
大家见谅,另外分不够的话可以单说哈。
不过,select substr(t1.text,level,1) st from dual connect by level < length(t1.text)+1)
where rownum = 1
就是求第一条的,是个死值呀,怎么会不同呢
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'. 唯一性啊.老大.
这样st不是始终为1嘛
然后再与外层关联,怎么会出现你想要的结果?
insert into aa(id,text) values('1','123');
insert into aa(id,text) values('2','345');
insert into aa(id,text) values('3','6');
之所以说结果应该会不同是因为最内曾查询所依赖的t1.text是由最外层查询aa的每条记录不同而引起的。
我的观点是
首先最外层查询全表遍历,针对每一条记录的text走到内增循环中,由内层循环把结果(只能是一条)返回回来,形成最外层的试图。
依照这个思路的话,因为rownum = 1 并不是最外层循环的rownum应该不会影响吧!
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 了解得不够深入。
决定结帖,来者有分。