表结构如下:
id val
1 aa
2 bb查询语句及结果如下:
SELECT id, level,val
FROM tab
CONNECT BY LEVEL<=31 1 AA
1 2 AA
1 3 AA
2 3 BB
2 2 BB
1 3 AA
2 3 BB
2 1 BB
1 2 AA
1 3 AA
2 3 BB
2 2 BB
1 3 AA
2 3 BB
的出十四条记录
我想知道,Oracle是怎么处理的得出了14条记录
网上搜过其他的解释,说是没层level产生后与原数据进行笛卡尔积运算
但是我算了一下,按笛卡尔积算应该有12条,即:2*1+2*2+2*3=12
求解释,谢谢大家了。
id val
1 aa
2 bb查询语句及结果如下:
SELECT id, level,val
FROM tab
CONNECT BY LEVEL<=31 1 AA
1 2 AA
1 3 AA
2 3 BB
2 2 BB
1 3 AA
2 3 BB
2 1 BB
1 2 AA
1 3 AA
2 3 BB
2 2 BB
1 3 AA
2 3 BB
的出十四条记录
我想知道,Oracle是怎么处理的得出了14条记录
网上搜过其他的解释,说是没层level产生后与原数据进行笛卡尔积运算
但是我算了一下,按笛卡尔积算应该有12条,即:2*1+2*2+2*3=12
求解释,谢谢大家了。
解决方案 »
- 怎样删除表与表空间之间的关系
- 希望高人帮忙 将sql存储过程转换成Oracle
- 请教大家个sql语句的写法,急着上线,请大家帮忙,谢谢
- ORACLE怎么要在OEM建表时,象SQLSERVER自动生成一个自增量的KEY(自动标识那种)
- 怎样按月分组
- [提问]关于RMAN的工作过程
- 数据备份问题:两台机器都装了ORACLE,库结构一样,A机器中的数据变化时,如何也同样修改B机器中的数据?
- 如何在创建表以及索引时的时候制定表空间,高高分紧急求助(100)
- ORACLE 在运行中出现ORA-01000的错误提示。谁遇到过。
- 请提供asp连接oracle数据库的conn.asp文件程序代码?
- 跪求大神们指点
- ORACLE的问题
2的一次方+2的二次方+2的三次方=14 aa bb
aa bb aa bb
aa bb aa bb aa bb aa bb
例如
Level 1
aa bb
level 2
即为aa bb与 aa bb的笛卡尔积
即aa bb aa bb
Level 3
即为aa bb aa bb与aa bb aa bb的笛卡尔积
即aa bb aa bb aa bb aa bb
id val
2 aa
4 bb
查询语句如下:
SELECT id, level,val
FROM tab
CONNECT BY LEVEL<=id
得到的结果如下:
2 1 aa
2 2 aa
4 3 bb
4 4 bb
4 2 bb
4 3 bb
4 4 bb
4 1 bb
2 2 aa
4 3 bb
4 4 bb
4 2 bb
4 3 bb
4 4 bb
14 rows selected
这个结果应该要如何解释啊?谢谢了
aa bb
aa bb aa bb
bb bb bb bb
bb bb bb bb
得到的是(AA,AA)(BB,BB)(AA,BB)(BB,AA)
AA BB和AA BB的笛卡尔积怎么会是AA,BB,AA,BB呢?
有点儿糊涂
(select 'aa' chr from dual
union all
select 'bb' chr from dual)
select level,chr,lpad(' ',(level-1)*5,'-')||chr other from x connect by level<=3;
LEVEL CHR OTHER
----- ------ ----------------------
1 aa aa
2 aa ---- aa
3 aa --------- aa
3 bb --------- bb
2 bb ---- bb
3 aa --------- aa
3 bb --------- bb
1 bb bb
2 aa ---- aa
3 aa --------- aa
3 bb --------- bb
2 bb ---- bb
3 aa --------- aa
3 bb --------- bb
id val
2 aa
4 bb
查询出与id值相同条数的该数据:
插叙语句如下:SELECT level,id,val
FROM tab
CONNECT BY LEVEL<=id and
prior id=id and prior dbms_random.value is not null
查询结果如下:
1 2 aa
2 2 aa
1 4 bb
2 4 bb
3 4 bb
4 4 bb
这个结果是怎么的到的
语句中的prior id=id
和dbms_random.value is not null是和用法?
ERROR:
ORA-01436: CONNECT BY loop in user data
为了欺骗它,这里用了一个PRIOR DBMS_RANDOM.VALUE(相当于获取随机数), 因为DBMS_RANDOM.VALUE每次调用都返回不同结果,所以它认为两行数据不一样,所以不报错了。
所以 LZ上面这个例子 结果就是根据id来的 因为层次level<=id 而且prior id=id和DBMS_RANDOM.VALUE会过滤多余的数据 所以显示的时候 你的id值是多少 当前id的行数就会显示多少