查询:
select level from dual connect by rownum<10;
给出从1到9的数字。
另一个查询:
SELECT LEVEL FROM DUAL CONNECT BY rownum>5;
输出:1
我在诸如经理/员工的分层数据中使用了CONNECT BY。但是我无法解释以上两个查询的结果。
编辑: 我不试图实现任何特殊的查询#2。我只想知道oracle如何解释查询。由于使用CONNECT
BY,是否有任何部分充当父母和孩子?为什么结果为1?幕后发生了什么?
如何CONNECT BY
被执行的查询和评估-步步(通过实施例)。
假设我们有下表和按查询连接:
select * from mytable;
X
----------
1
2
3
4
SELECT level, m.*
FROM mytable m
START with x = 1
CONNECT BY PRIOR x +1 = x OR PRIOR x + 2 = x
ORDER BY level;
步骤1:
从表mytable
中选择满足START WITH
条件的行,将LEVEL = 1分配给返回的结果集:
CREATE TABLE step1 AS
SELECT 1 "LEVEL", X from mytable
WHERE x = 1;
SELECT * FROM step1;
LEVEL X
---------- ----------
1 1
第2步
等级提高1:
LEVEL = LEVEL + 1
mytable
使用CONNECT BY
条件作为联接条件联接上一步返回的结果集。
此子句PRIOR column-name
中指的是上一步返回的结果集,而简单column-name
指的是mytable
表:
CREATE TABLE step2 AS
SELECT 2 "LEVEL", mytable.X from mytable
JOIN step1 "PRIOR"
ON "PRIOR".x +1 = mytable.x or "PRIOR".x + 2 = mytable.x;
select * from step2;
LEVEL X
---------- ----------
2 2
2 3
步骤x + 1
重复#2,直到最后一个操作返回空结果集。
第三步
CREATE TABLE step3 AS
SELECT 3 "LEVEL", mytable.X from mytable
JOIN step2 "PRIOR"
ON "PRIOR".x +1 = mytable.x or "PRIOR".x + 2 = mytable.x;
select * from step3;
LEVEL X
---------- ----------
3 3
3 4
3 4
第4步
CREATE TABLE step4 AS
SELECT 4 "LEVEL", mytable.X from mytable
JOIN step3 "PRIOR"
ON "PRIOR".x +1 = mytable.x or "PRIOR".x + 2 = mytable.x;
select * from step4;
LEVEL X
---------- ----------
4 4
第5步
CREATE TABLE step5 AS
SELECT 5 "LEVEL", mytable.X from mytable
JOIN step4 "PRIOR"
ON "PRIOR".x +1 = mytable.x or "PRIOR".x + 2 = mytable.x;
select * from step5;
no rows selected
第5步未返回任何行,因此现在我们完成查询
最后一步
UNION ALL
所有步骤的结果,并将其作为最终结果返回:
SELECT * FROM step1
UNION ALL
SELECT * FROM step2
UNION ALL
SELECT * FROM step3
UNION ALL
SELECT * FROM step4
UNION ALL
SELECT * FROM step5;
LEVEL X
---------- ----------
1 1
2 2
2 3
3 3
3 4
3 4
4 4
现在,将以上过程应用于您的查询:
SELECT * FROM dual;
DUMMY
-----
X
SELECT LEVEL FROM DUAL CONNECT BY rownum>5;
步骤1
由于查询不包含该START WITH
子句,因此Oracle从源表中选择所有记录:
CREATE TABLE step1 AS
SELECT 1 "LEVEL" FROM dual;
select * from step1;
LEVEL
----------
1
第2步
CREATE TABLE step2 AS
SELECT 2 "LEVEL" from dual
JOIN step1 "PRIOR"
ON rownum > 5
select * from step2;
no rows selected
由于最后一步没有返回任何行,因此我们将完成查询。
最后一步
SELECT * FROM step1
UNION ALL
SELECT * FROM step2;
LEVEL
----------
1
最后一个查询的分析:
select level from dual connect by rownum<10;
我留给你做家庭作业。
问题内容: 我真的很困惑。我已经尝试过使用tomcat的Jax-rs并使用所有能够使用调用我的服务的注释。因此,没有Jax- rs,我可以简单地拥有一个servlet并调用我的服务。同样,正如我尝试过的那样,有jax-rs和jersey(我研究了的实现)以及web.xml中的以下内容。 然后,我在GET上具有与JAX-RS相同的注释,可以使用正确的URL调用我的服务。 我的问题是,为什么球衣使用s
问题内容: 我试图从不同的部分组成URL,并且在理解此方法的行为时遇到了麻烦。例如: Python 3.x 您能否解释这种方法的确切行为? 问题答案: (对我而言)最好的方式是第一个参数,就像您在浏览器中所在的页面一样。第二个参数是该页面上锚点的href。结果是您单击后将定向到的最终URL。 根据我的描述,这很有意义。尽管希望基础包括一个方案和领域。 如果您在某个虚拟主机上,并且有一个类似的锚,则
问题内容: 我是使用属性的新手,因此我进行了如下所示的简单测试。在测试中,我创建了两个类“ Test1”和“ Test2”,每个类都持有一个值。我正在尝试使用属性来控制对伪隐藏的“ val”属性的访问。当前测试不限制“ val”属性的任何输入或输出,因为该程序仅是概念证明。下面显示的两个测试类产生相同的结果,并被认为代表了构造属性的不同方法。我要引用的属性的示例使用在python docs上找到。
来自topcoder的一篇文章: “在BFS中,我们在将顶点推入队列时标记访问的顶点,而不是在DFS中弹出顶点时标记访问的顶点。” 注意:这是在使用显式堆栈(伪dfs)实现dfs时说的。 我的问题是为什么会这样?为什么我们不能在从队列弹出后标记访问的顶点,而在bfs的情况下推到队列上?
我已经为ubuntu(13.04版)安装了PHP(作为apache的模块)。我遵循本文档说明http://www.php.net/manual/en/install.unix.apache2.php 在安装结束时,我的php。ini位于并读取于/usr/local/lib 现在我需要安装GD库。我这样做: 当然还有重启apache。扩展未加载。 我发现我在/etc/php5下有另一个php文件夹,
这可能看起来是一个非常有趣和愚蠢的问题。。 我试着在Android应用程序中使用可运行程序、线程、服务和意向服务来查看后台操作。 所以我创建了一个活动,并在活动中创建了一个简单的线程,比如, 因此,在上述场景中,按钮文本正在发生变化。 没关系,我打电话是这样的: 或 为什么我的按钮文本通过调用start()而改变-何时使用背景线程? 现在是一个非常有趣的场景;如果我延迟2秒,就像这样; 如果调用s