|
原帖由 alafqq 于 2011-3-3 14:36 发表 ![]()
说实话,connect by 还真不知怎么理解。 connect by [ prior ] [start with] 我知道是在一起。
单只有connect by ,如下句
select t.*,level from dual t connect by level<10
怎么理解呢?递归的自连接,那么,这里的连接 只的是 * 连上 *
假设我有个One表, 他有 id,name 2列。
create table ONE
(
ID VARCHAR2(20),
NAME VARCHAR2(20)
);
insert into one(id,name) values (9,96);
insert into one(id,name) values (123,22);
select id,name,level from one connect by level<3
那么在上面这句话中,这里的连接,是指什么连接呢?id单独连id?name单独连name?抑或是2者都关联?
你这个语句根本没有前后级的连接条件,只有中止循环的条件LEVEL<3, 所以它相当于每次都把当前层的数据和ONE表作一个笛卡尔连接。
奇怪的是ORACLE在这种情况下不报错,即使同一行数据不断出现。但如果有连接条件,一行数据重复出现它就报错。 |
|